iT邦幫忙

0

T-SQL SELECT 欄列顯示排列問題

匿名 2012-03-29 16:03:468334 瀏覽

請問各位大大
如已寫一段T-SQL (程式碼如下)
SELECT顯示如圖右
希望能顯示成如圖左的話
該用甚麼語法修改
感激不盡

SELECT 公司 ,
       ISNULL(CAST(SUM(CASE WHEN 類別 LIKE 'A%' THEN 銷售金額 END) AS VARCHAR),'') AS 'A類' ,
       ISNULL(CAST(SUM(CASE WHEN 類別 LIKE 'B%' THEN 銷售金額 END) AS VARCHAR),'') AS 'B類' ,
       ISNULL(CAST(SUM(CASE WHEN 類別 LIKE 'C%' THEN 銷售金額 END) AS VARCHAR),'') AS 'C類' 
FROM 銷售檔

krarm iT邦好手 1 級 ‧ 2012-03-29 23:43:23 檢舉
用子查詢+Left join
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

6
外獅佬
iT邦大師 1 級 ‧ 2012-03-29 23:26:43
最佳解答

如果用的是SQL Server 2005以後的版本,可以使用PIVOT加上動態組成欄位的技巧

<pre class="c" name="code">
SELECT [公司],('類別' + [類別]) AS [類別],[銷售金額] INTO #tmp FROM [tb1]
GO
DECLARE @ColHeader VARCHAR(MAX)
DECLARE @SQL NVARCHAR(MAX)
SELECT @ColHeader = 
	COALESCE(
		@ColHeader + ',[' +  CAST([類別] AS varchar) + ']',
		'[' + CAST([類別] AS varchar) + ']'
		)
FROM (SELECT DISTINCT [類別] FROM #tmp) AS x
SET @SQL = N'
SELECT * FROM #tmp PIVOT (SUM([銷售金額]) FOR [類別] IN (' + @ColHeader + ')) AS p'
EXECUTE(@SQL)
DROP TABLE #tmp
外獅佬 iT邦大師 1 級 ‧ 2012-03-29 23:44:25 檢舉

這裡使用temporary table只是為了要讓類別欄位產生「類別A」這樣的效果。
如果不需要額外加上「類別」的字樣,則可以直接使用資料表查詢即可。
不過,要產生這樣的效果....應該有更好的作法....
老人家懶得想了...睡覺去~
給大家腦力激盪囉~~

我要發表回答

立即登入回答