2016-08-12 49 views
0

您好,請幫助我解決這個問題。我在我的數據庫這個記錄:將具有不同值的行組合到列中

Name Activity  DateScheduled 
Kevin Meeting  8/1/2016 
Kevin Lunch Meeting 8/1/2016 
Kevin Client Meeting 8/3/2016 
Mark Report   8/2/2016 
Mark Occular  8/4/2016 
Mark Board Meeting 8/2/2016 

我所要的輸出是什麼是這樣的:

Name 8/1/2016  8/2/2016  8/3/2016  8/4/2016 
Kevin Meeting   null   Client Meeting null 
     Lunch Meeting null   null   null 
Mark null   Report   null   Occular 
     null   Board Meeting null   null 

到目前爲止,這是我已經試過,但顯示的是不是我想要的輸出:

SELECT name 
CASE WHEN (DateScheduled = '08/01/2016') THEN Activity ELSE Null END AS [08/01/2016] 

,CASE WHEN (DateScheduled = '08/02/2016') THEN Activity ELSE Null END AS [08/02/2016] 

,CASE WHEN (DateScheduled = '08/03/2016') THEN Activity ELSE Null END AS [08/03/2016] 

,CASE WHEN (DateScheduled = '08/04/2016') THEN Activity ELSE Null END AS [08/04/2016] 
From Schedule 

在此先感謝。

+0

嗨凱文,你想要做的是支點SQL評估@SQL命令。可能是關於數據透視表的SQL教程可以幫助http://www.kodyaz.com/articles/t-sql-pivot-tables-in-sql-server-tutorial-with-examples.aspx – Eralper

回答

0

請檢查下面SQL Pivot query

select 
* 
from (
    select * from EventsTable 
) Data 
PIVOT (
MAX(Activity) 
FOR DateScheduled 
IN (
    [20160801],[20160802],[20160803],[20160804] 
) 
) PivotTable 

enter image description here

+0

我已更新問題先生。謝謝 – KevinNEWBIE

+0

嗨,答案是不正確的,因爲每個名字都應該列出給定日期下的所有活動。我用不同的例子更新了我的問題,以進一步說明問題。謝謝 – KevinNEWBIE

0

而不是在樞軸查詢手動提供的日期,你可以選擇構建dynamic SQL pivot query如下圖所示

DECLARE @dates nvarchar(max) 
SELECT @dates = 
STUFF(
(
    select distinct ',[' + CAST(cast([date] as date) as varchar(10)) + ']' 
    FROM [dbo].[DateTable]('20160801','20160831') 
    for xml path('') 
), 
1,1,'') 

DECLARE @SQL nvarchar(max) 
SELECT @SQL = N' 
select 
* 
from (
    select * from EventsTable 
) Data 
PIVOT (
MAX(Activity) 
FOR DateScheduled 
IN (
    ' + @dates + ' 
) 
) PivotTable 
' 

exec sp_executesql @SQL 

請注意,在你面前在SQL Select語句上面執行,您需要創建用戶定義的函數create dates table in SQL。此函數啓用日曆表dbo.DateTable()在給定的兩個日期之間

此動態SQL數據透視表的另一個有趣的部分是,程序員使用SQL concatenation using XML Path。所以我們連接所有用逗號分隔的日期並構建我們的@SQL變量。 最後,我們使用sp_executesql存儲過程

輸出如下

enter image description here

+0

嗨,我已經更新了這個問題。 – KevinNEWBIE

相關問題