将具有不同值的行组合到列中

时间:2016-08-12 07:36:29

标签: sql-server

您好,请帮我解决这个问题。我在我的数据库中有这些记录:

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

提前致谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以选择构建here,而不是在Pivot查询中手动提供日期

{{1}}

请注意,在执行上述SQL Select语句之前,需要为dynamic SQL pivot query创建用户定义的函数。此函数在给定的两个日期之间启用日历表dbo.DateTable()

这个动态SQL支点的另一个有趣的部分是,程序员使用create dates table in SQL。所以我们连接用逗号分隔的所有日期并构建我们的@SQL变量。 最后,我们使用sp_ExecuteSQL存储过程

评估@SQL命令

输出如下

SQL concatenation using XML Path