常見報表需求:將單欄垂直資料(如商品清單)轉換為多欄橫向顯示,提升閱讀體驗。例如將 22 筆商品資料每 3 筆一組,轉為 3 組 ID+NAME 欄位並排顯示。
WITH TEST AS (
SELECT 1 AS Id, '蘋果汁' AS NAME FROM Dual UNION ALL
SELECT 2, '牛奶' FROM Dual UNION ALL
SELECT 3, '蕃茄醬' FROM Dual UNION ALL
SELECT 4, '鹽' FROM Dual UNION ALL
SELECT 5, '麻油' FROM Dual UNION ALL
SELECT 6, '醬油' FROM Dual UNION ALL
SELECT 7, '海鮮粉' FROM Dual UNION ALL
SELECT 8, '胡椒粉' FROM Dual UNION ALL
SELECT 9, '雞' FROM Dual UNION ALL
SELECT 10, '蟹' FROM Dual UNION ALL
SELECT 11, '民眾奶酪' FROM Dual UNION ALL
SELECT 12, '德國奶酪' FROM Dual UNION ALL
SELECT 13, '龍蝦' FROM Dual UNION ALL
SELECT 14, '沙茶' FROM Dual UNION ALL
SELECT 15, '味精' FROM Dual UNION ALL
SELECT 16, '餅乾' FROM Dual UNION ALL
SELECT 17, '豬肉' FROM Dual UNION ALL
SELECT 18, '墨魚' FROM Dual UNION ALL
SELECT 19, '糖果' FROM Dual UNION ALL
SELECT 20, '桂花糕' FROM Dual UNION ALL
SELECT 21, '花生' FROM Dual UNION ALL
SELECT 22, '糯米' FROM Dual
)
SELECT
MAX(DECODE(MOD(Id, 3), 1, Id)) Id1,
MAX(DECODE(MOD(Id, 3), 1, NAME)) Name1,
MAX(DECODE(MOD(Id, 3), 2, Id)) Id2,
MAX(DECODE(MOD(Id, 3), 2, NAME)) Name2,
MAX(DECODE(MOD(Id, 3), 0, Id)) Id3,
MAX(DECODE(MOD(Id, 3), 0, NAME)) Name3
FROM Test
GROUP BY TRUNC((ROWNUM - 0.1) / 3)
ORDER BY Id1;
ID1 NAME1 ID2 NAME2 ID3 NAME3 1 蘋果汁 2 牛奶 3 蕃茄醬 4 鹽 5 麻油 6 醬油 7 海鮮粉 8 胡椒粉 9 雞 10 蟹 11 民眾奶酪 12 德國奶酪 13 龍蝦 14 沙茶 15 味精 16 餅乾 17 豬肉 18 墨魚 19 糖果 20 桂花糕 21 花生 22 糯米 (null) (null)