[英]SQL: Dynamic renaming of columns based on row values
考慮到Oracle 10g
,有沒有辦法根據指定的行重命名列?
我先來介紹一下背景。 要求是將行轉動並將它們轉換為列。 由於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.
有沒有辦法動態命名列?
列名稱類似於變量名稱 - 它是可以在程序中使用的標識符。 它的名稱動態變化沒有多大意義。
IMO,您當前為每個屬性設置不同列的策略是可以的。
您正在體驗擁有EAV數據模型的不利方面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.