Oracle 竖列如何横行现实
本帖最后由 NobodyCanHelpMe 于 2012-06-12 23:02:27 编辑 表如下显示:
Name Level Month
张三 A 1
李四 B 2
王五 C 3
张三 B 2
李四 B 1
王五 C 1
张三 B 3
李四 B 3
王五 B 2
姓名 1月份 2月份 3月份
张三 A B B
李四 B B B
王五 C B C
WITH t1 AS (SELECT '张三' Name, 'A' "LEVEL", 1 Month FROM DUAL
UNION ALL
SELECT '李四', 'B', 2 Month FROM DUAL
UNION ALL
SELECT '王五', 'C', 3 Month FROM DUAL
UNION ALL
SELECT '张三', 'B', 2 Month FROM DUAL
UNION ALL
SELECT '李四', 'B', 1 Month FROM DUAL
UNION ALL
SELECT '王五', 'C', 1 Month FROM DUAL
UNION ALL
SELECT '张三', 'B', 3 Month FROM DUAL
UNION ALL
SELECT '李四', 'B', 3 Month FROM DUAL
UNION ALL
SELECT '王五', 'B', 2 Month FROM DUAL)
SELECT name,
wm_concat ("一月份") "一月份",
wm_concat ("二月份") "二月份",
wm_concat ("三月份") "三月份"
FROM (SELECT name,
DECODE (month, 1, "LEVEL") "一月份",
DECODE (month, 2, "LEVEL") "二月份",
DECODE (month, 3, "LEVEL") "三月份"
FROM t1)
GROUP BY name
WITH t1 AS (SELECT '张三' Name, 'A' "LEVEL", 1 Month FROM DUAL
UNION ALL
SELECT '李四', 'B', 2 Month FROM DUAL
UNION ALL
SELECT '王五', 'C', 3 Month FROM DUAL
UNION ALL
SELECT '张三', 'B', 2 Month FROM DUAL
UNION ALL
SELECT '李四', 'B', 1 Month FROM DUAL
UNION ALL
SELECT '王五', 'C', 1 Month FROM DUAL
UNION ALL
SELECT '张三', 'B', 3 Month FROM DUAL
UNION ALL
SELECT '李四', 'B', 3 Month FROM DUAL
UNION ALL
SELECT '王五', 'B', 2 Month FROM DUAL)
SELECT name,
Max(DECODE (month, 1, "LEVEL")) "一月份",
Max(DECODE (month, 2, "LEVEL")) "二月份",
Max(DECODE (month, 3, "LEVEL")) "三月份"
FROM t1 GROUP BY NAME