1

如果我查询返回如下内容,我有一个“表 A”:

DPSF0010001 | 4973
DPSF0010002 | 139
DPSF0010003 | 266
DPSF0010004 | 437
DPSF0010005 | 391
DPSF0010006 | 146
DPSF0010007 | 100
DPSF0010008 | 78
DPSF0010009 | 141
DPSF0010010 | 253
DPSF0010011 | 425
DPSF0010012 | 491
DPSF0010013 | 501
DPSF0010014 | 477
DPSF0010015 | 382
...
.
.

该查询有多个列 DPSFxxxx。DPSFxxxxx 可以引用另一个表,其中“DPSF0010001”可以解码为字符串:“Total:”。例如:

 Total:                      | dpsf0010001
  Under 5 years              | dpsf0010002
  5 to 9 years               | dpsf0010003
  10 to 14 years             | dpsf0010004
  15 to 19 years             | dpsf0010005
  20 to 24 years             | dpsf0010006
  25 to 29 years             | dpsf0010007
  30 to 34 years             | dpsf0010008
  35 to 39 years             | dpsf0010009
  40 to 44 years             | dpsf0010010
  45 to 49 years             | dpsf0010011
  50 to 54 years             | dpsf0010012
  55 to 59 years             | dpsf0010013
  60 to 64 years             | dpsf0010014
  65 to 69 years             | dpsf0010015
...
.
.

我想DPSF0010001在我的查询中用表 B 中的关联字符串替换它。例如:

前:

SELECT "DPSF0010001" from TableA;

 DPSF0010001
-------------
        4973
(1 row)

后:

SELECT "DPSF0010001" from TableA;

 Total:
-------------
        4973
(1 row)

如何使用查找值替换查询中的列名?我知道我可以使用 AS 重命名,如何扩展它以在不同的表中查找值?

4

2 回答 2

1

不完全清楚你在问什么,但听起来你需要一个pivot query

SQL 不允许在读取数据的同一查询中动态地将数据值用作列名或别名。列名和别名必须在解析查询之前固定,这自然会在它从表中读取任何数据之前出现。因此,数据值没有机会覆盖、重命名或扩展列集。

因此,执行数据透视查询要求您在编写查询之前了解代码及其标签。您可以查询您的解码表,从这些结果中,生成一系列表达式非常简单,如下所示:

SELECT 
  MAX(CASE code WHEN 'dpsf0010001' THEN value END) AS 'Total',
  MAX(CASE code WHEN 'dpsf0010002' THEN value END) AS 'Under 5 years',
  MAX(CASE code WHEN 'dpsf0010003' THEN value END) AS '10 to 14 years'
  . . .
FROM TableA;
于 2013-07-15T23:47:55.713 回答
0

如何解决这个问题与你对结果所做的事情有关。如果你有一个带有一些能力程序的前端,你可以做这样的选择(我假设两个表中的所有列名都相同)

    SELECT "Column Head" as RowType, * FROM TABLEA
UNION ALL
    SELECT "Column Value" as RowType, * FROM TABLEB

这会给你这样的东西:

RowType         DPSF0010001     DPSF0010002     DPSF0010003     DPSF0010004     DPSF0010005     DPSF0010006     DPSF0010007     DPSF0010008     DPSF0010009     DPSF0010010     DPSF0010011     DPSF0010012     DPSF0010013     DPSF0010014     DPSF0010015
Column Head     Total:          Under 5 years   5 to 9 years    10 to 14 years  15 to 19 years  20 to 24 years  25 to 29 years  30 to 34 years  35 to 39 years  40 to 44 years  45 to 49 years  50 to 54 years  55 to 59 years  60 to 64 years  65 to 69 years
Column Value    4973            139             266             437             391             146             100             78              141             253             425             491             501             477             382

无论您的前端是什么,它都应该很容易显示。

于 2013-07-16T00:13:14.483 回答