激活表 TL_CSU_ACTIVATE_LOG、用戶表 TV_CSU_USER,查詢 2014-12 至 2015-12 每月 T/B/M/D 四類用戶註冊數,輸出橫表。
SELECT TT.Month,
SUM(CASE WHEN TT.TYPE = 'B' THEN Count ELSE 0 END) AS B,
SUM(CASE WHEN TT.TYPE = 'M' THEN Count ELSE 0 END) AS M,
SUM(CASE WHEN TT.TYPE = 'D' THEN Count ELSE 0 END) AS D,
SUM(CASE WHEN TT.TYPE = 'T' THEN Count ELSE 0 END) AS T
FROM (
SELECT TO_CHAR(T1.ACTIVATE_TIME, 'yyyy-MM') AS Month,
T2.TYPE,
COUNT(*) AS Count
FROM TL_CSU_ACTIVATE_LOG T1
LEFT JOIN TV_CSU_USER T2 ON T2.USER_ID = T1.USER_ID
WHERE TO_CHAR(T1.ACTIVATE_TIME, 'yyyy-MM') BETWEEN '2014-12' AND '2015-12'
GROUP BY T2.TYPE, TO_CHAR(T1.ACTIVATE_TIME, 'yyyy-MM')
) TT
GROUP BY TT.Month
ORDER BY TT.Month;
月份+類型 分組計數,外層按月份彙總並用 CASE WHEN 將行轉列。PIVOT(Oracle 11g+)。TO_CHAR 格式化月份便於分組與排序。
