上一篇 : [MS SQL] 使用PIVOT 做兩個欄位的交叉分析(固定欄位) 說明了如何將固定欄位轉成交叉分析表, 此篇進一步說明如何讓動態欄位轉成交叉分析表。 1. 產生範例資料表,這次我增加了一個交通工具選項(竹蜻蜓),目的是要說明交通工具欄位可以是動態的。 這邊我建立一個 資料表值函數 (Function),回傳範例資料表。 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION uf_Table1() RETURNS @Table1 TABLE ( WhereToGo nvarchar(10), --要去哪? HowToGo nvarchar(10), --怎麼去? TotCnt int --多少人選此方法 ) AS BEGIN INSERT INTO @Table1 SELECT '台北','開車',2 UNION SELECT '台北','坐高鐵',9 UNION SELECT '台北','竹蜻蜓',200 UNION SELECT '高雄','開車',5 UNION SELECT '高雄','坐高鐵',10 UNION SELECT '高雄','竹蜻蜓',234 RETURN; END GO SELECT * FROM dbo.uf_Table1(); 2. 在使用PIVOT產生交叉分析表之前,我們要先產生一個動態的欄位字串。 --產生一個動態的欄位字串。 DECLARE @columnNames nvarchar(MAX); SELECT @columnNames = COALESCE(@columnNames + ',', '') + QUOTENAME(HowToGo) FROM dbo.uf_Table1() GROUP BY HowToGo SELECT @columnNames; 3. 使用PIVOT產生 動態欄位 的交叉分析表: DECLARE @SQL