2016-08-12 64 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

相关问题