繁体   English   中英

需要有关PIVOT表的帮助

[英]Need assistance with PIVOT table

我有一个SQL查询,我需要将其转换为PIVOT表。 现在数据就这样显示...

在此处输入图片说明

但是我真的希望它与ProcessDesc一起显示为COLUMN HEADINGS,并且“交集”为DateCompleted,例如...。

在此处输入图片说明

我该怎么做呢? 创建原始查询的查询如下...

SELECT DISTINCT E.DisplayName, EPM.DateCompleted, PS.SortNumber, PS.ProcessDesc
FROM dbo.EPM
  INNER JOIN dbo.PS
    ON EPM.EPS = PS.ID
  INNER JOIN dbo.E
    ON EPM.ID = E.ID
WHERE DisplayName IS NOT NULL
ORDER BY E.DisplayName, PS.SortNumber

试试这个:

#TEMP这将是您的查询生成的:

SELECT DISTINCT E.DisplayName, EPM.DateCompleted, PS.SortNumber, PS.ProcessDesc
FROM dbo.EPM
  INNER JOIN dbo.PS
    ON EPM.EPS = PS.ID
  INNER JOIN dbo.E
    ON EPM.ID = E.ID
WHERE DisplayName IS NOT NULL
ORDER BY E.DisplayName, PS.SortNumber

使用动态SQL的解决方案

declare @sql1 as varchar(4000) = ''
declare @sql2 as varchar(4000) = ''
declare @sql3 as varchar(4000) = ''

set @sql1 = 
'select
    DisplayName
'

select @sql2 = @sql2 +
'   ,max(case when ProcessDesc = ''' + ProcessDesc + ''' then DateCompleted end) as [' + ProcessDesc +']
'
from #TEMP
order by ProcessDesc, ProcessSort

set @sql3 =
'
from #TEMP
group by DisplayName
ORDER BY DisplayName
'
print @sql1 + @sql2 +@sql3
exec(@sql1 + @sql2 +@sql3)
SELECT E.DisplayName, 
MAX(CASE WHEN PS.ProcessDesc='Set-Up Form 1' THEN EPM.DateCompleted END) as [Set-Up Form 1],
MAX(CASE WHEN PS.ProcessDesc='Set-Up Form 2' THEN EPM.DateCompleted END) as [Set-Up Form 2],
MAX(CASE WHEN PS.ProcessDesc='Set-Up Form 3' THEN EPM.DateCompleted END) as [Set-Up Form 3] 
FROM dbo.EPM
  INNER JOIN dbo.PS
    ON EPM.EPS = PS.ID
  INNER JOIN dbo.E
    ON EPM.ID = E.ID
WHERE DisplayName IS NOT NULL
GROUP BY E.DisplayName
ORDER BY E.DisplayName, PS.SortNumber

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM