如果我查询返回的内容是“表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:”。 e.g:
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
w /它在表B中的关联字符串。例如:
在:
SELECT "DPSF0010001" from TableA;
DPSF0010001
-------------
4973
(1 row)
在:
SELECT "DPSF0010001" from TableA;
Total:
-------------
4973
(1 row)
如何使用查找值替换查询中的列名?我知道我可以使用AS重命名,如何扩展它来查找不同表中的值?
答案 0 :(得分:1)
您所询问的内容并不完全清楚,但听起来您需要透视查询。
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;
答案 1 :(得分: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
无论您的前端是什么,都应该很容易显示。