考虑到Oracle 10g
,有没有办法根据指定行重命名列?SQL:根据行值对列进行动态重命名
让我先给一个背景。要求是对行进行旋转并将它们转换为列。由于Oracle 10g不支持PIVOT功能,因此我们已经完成了使用max and case
关键字的工作。
现在的问题是这样的。有没有基于两行重新命名列的方法? 考虑见下表:
BRAND | MODEL | COMPONENT_NAME | COMPONENT_VALUE | ATTRIBUTE_NAME | ATTRIBUTE_VALUE
-----------------------------------------------------------------------------------
SAMSUNG | I9100 | Chipset | Exynos | frequency | 1200
SAMSUNG | I9100 | Screen | Amoled | colors | 16M
SAMSUNG | I9100G | Chipset | TI OMAP4430 | frequency | 1200
SAMSUNG | I9100G | Screen | Amoled | colors | 16M
------------------------------------------------------------------------------------
我们希望这样的:与上面的COMPONENT_NAME
转化为`column header for one and the
COMPONENT_NAME - ATTRIBUTE_NAME`作为另一个。
BRAND | MODEL | Chipset | Chipset - frequency | Screen | Screen - colors
------------------------------------------------------------------------
SAMSUNG | I9100 | Exynos | 1200 | Amoled | 16M
SAMSUNG | I9100G | TI OMAP4430 | 1200 | Amoled | 16M
------------------------------------------------------------------------
目前我们下面来产生第二个表:
SELECT DISTINCT BRAND, MODEL,
MAX(CASE WHEN (COMPONENT_NAME = 'Chipset') THEN
COMPONENT_VALUE
END) AS "Chipset",
MAX(CASE WHEN (COMPONENT_NAME = 'Chipset' and ATTRIBUTE_NAME = 'frequency') THEN
ATTRIBUTE_VALUE
END) AS "Screen",
MAX(CASE WHEN (COMPONENT_NAME = 'Screen') THEN
COMPONENT_VALUE
END) AS "Screen",
MAX(CASE WHEN (COMPONENT_NAME = 'Screen' and ATTRIBUTE_NAME = 'colors') THEN
ATTRIBUTE_VALUE
END) AS "Screen - colors" from table....etc.
有没有办法来动态name列?
@GauravSoni,如果你不喜欢我的编辑,你应该已经推出它背部。因为您刚刚重新介绍了语法错误和不必要的内嵌标签,并删除了有用的标签? – Ben 2012-04-01 13:26:43
@ben:对不起,实际上没有看到你的编辑部分,可能是当我编辑你已经承诺你的编辑。你可以恢复我的变化。再次抱歉。 – 2012-04-01 13:45:20