考慮到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