我有一个具有这种结构的表:
date colname value
----------------------------
date col1name col1's value
date col2name col2's value
date col3name col3's value
现在我需要将其转换为这种结构:
date col1name col2name col3name
-----------------------------------------------
date col1's value col2's value col3's value
有可能吗?
答案 0 :(得分:2)
您想要一个数据透视表:
SELECT t.date,
MAX(CASE WHEN t.colname = 'col1name' THEN t.value END) AS col1name,
MAX(CASE WHEN t.colname = 'col2name' THEN t.value END) AS col2name,
MAX(CASE WHEN t.colname = 'col3name' THEN t.value END) AS col3name
FROM TABLE t
GROUP BY t.date
如果要根据colname值使其动态化,则需要使用dynamic SQL,因为在构造实际查询之前需要先获取colname值列表。
Oracle直到11g才添加PIVOT / UNPIVOT支持。支持CASE
表达式9i +;在9i之前你必须使用DECODE ......