[MS SQL] 使用 PIVOT 扭轉資料,由直列轉為橫向資料
PIVOT使用
--【簡易版】
SELECT *
FROM (
SELECT l.MasterLangId, l.LangType, l.ShowText
FROM dbo.Lang l
) t
PIVOT (
-- 設定彙總欄位及方式
MAX(ShowText)
-- 設定轉置欄位,並指定轉置欄位中需彙總的條件值作為新欄位
FOR LangType IN ([zh-TW], [zh-CN], [en-US])
) p;
--【動態生成欄位】
-- 使用 FOR XML PATH 動態生成轉置列清單
DECLARE @cols NVARCHAR(MAX), @query NVARCHAR(MAX);
SELECT @cols = STUFF((
SELECT ',' + QUOTENAME(LangType)
FROM (
SELECT DISTINCT LangType
FROM dbo.Lang
) AS Sub
ORDER BY
CASE
WHEN LangType = 'zh-TW' THEN 1
WHEN LangType = 'zh-CN' THEN 2
ELSE 3
END, LangType
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
-- 動態 PIVOT 查詢
SET @query = '
SELECT *
FROM (
SELECT l.MasterLangId, l.LangType, l.ShowText
FROM dbo.Lang l
) t
PIVOT (
MAX(ShowText)
FOR LangType IN (' + @cols + ')
) p;
';
-- 執行動態 SQL
EXEC sp_executesql @query;
參考網址:
By Hao★
留言
張貼留言
歡迎留言