[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★

留言

熱門文章

[C#] 將DataTable轉換成Html格式表格

[MS SQL] 查詢所有Procedure