我想要把操縱表格數據變成更具視覺吸引力的格式輸出。這可能是問題的一部分,因爲我想要的可能是針對單獨的報告軟件。當我不想使用聚合時,是否應該使用Pivot將SQL Server 2008行值轉換爲列名稱?
我有一個表,看起來像這樣
teacher student
----------------------
teacher1 Bob
teacher1 Jim
teacher2 Sam
teacher3 Bill
teacher3 John
teacher3 Eric
我想要一個表,看起來是這樣的:
teacher1 teacher2 teacher3
---------------------------------
Bob Sam Bill
Jim null John
null null Eric
所以我嘗試餡所有老師的名字在一個變量,然後使用一個Pivot
但由於我必須選擇一個聚合我只能得到Max
或Min
這樣的學生:
DECLARE @teacherList AS VARCHAR(max)
SELECT @teacherList = Stuff((SELECT DISTINCT',[' + teacher + ']'
FROM myTable
FOR xml path('')), 1, 1, '')
DECLARE @dynamic_pivot_query AS VARCHAR(max)
SET @dynamic_pivot_query = 'select' + @teacherList +
'from
(
SELECT [teacher],[student]
FROM [dbo].[myTable]
) as S
Pivot
(
MIN([student])
FOR teacher IN (' + @teacherList + ')
) as P
'
EXEC(@dynamic_pivot_query)
這樣做的結果是:
teacher1 teacher2 teacher3
---------------------------------
Bob Sam Bill
假設如下:
- #教師,他們的名字是未知的(可變)
- #每名教師的學生是未知的,可能每位教師不同
有沒有辦法做到這一點?
你還更希望小鮑比表(http://xkcd.com/327/)不會長大成爲老師。這對SQL注入很敏感。 – 2012-04-23 18:45:14
@SteveKass - 感謝您指出。我已經更新了答案。 – 2012-04-24 06:19:46