進貨表 TableA
進貨單號 | 水果 | 價格 |
001 | 蘋果 | 50 |
002 | 香蕉 | 40 |
003 | 橘子 | 50 |
004 | 香蕉 | 45 |
005 | 橘子 | 55 |
今天如果要將水果,蘋果,香蕉 變成欄位名稱 來顯示 如
蘋果 | 香蕉 | 橘子 | |
總進價格 | 50 | 85 | 105 |
只要這麼寫就可以了
Select * From
(Select 水果,價格 From TableA) As A1
pivot
(SUM(價格) For 水果 IN ([蘋果],[香蕉],[橘子])) As A2
-----------------------------------------------
假設今天 進貨不清楚水果有幾種, 或者水果種類太多等
無法或不方便把 IN 後面的欄位寫清楚的情況下
這邊就可以用動態產生的方式
Declare @StrTital NVARCHAR(Max) ='' --宣告變數來儲存水果種類名稱
Declare @StrSQL NVARCHAR(Max) ='' --宣告變數用來組SQL字串,並拿來下指令
Select @StrTital= @StrTital+QUOTENAME(水果)+N',' From TableA Group By 水果
--QUOTENAME: 傳回 Unicode 字串,且附加了分隔符號,以便使輸入字串成為有效的
SQL Server 分隔識別碼
--執行結果: @StrTital= [蘋果],[香蕉],[橘子], ...
Set @StrTital= Left(@StrTital, Len(@StrTital)-1) --去除字串最後尾的','
Set @StrSQL= N' Select * From
(Select 水果,價格 From TableA) As A1
pivot
(SUM(價格) For 水果 IN ('+@StrTital+N')) As A2'
EXEC sp_executesql @StrSQL --執行SQL字串
以上寫法就會得到我們想要的結果
沒有留言:
張貼留言