通过查询查询别名列名

时间:2013-07-15 23:29:14

标签: sql pivot-table

如果我查询返回的内容是“表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重命名,如何扩展它来查找不同表中的值?

2 个答案:

答案 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

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