Sql server 使用数据透视表生成;“培训矩阵”;

Sql server 使用数据透视表生成;“培训矩阵”;,sql-server,pivot,Sql Server,Pivot,我有一张“证书考试”的表格,内容大致如下: Entity_ID | Certificate_ID | CertificateExpiry 1 | 1 | dd/mm/YYYY 1 | 2 | dd/mm/YYYY 等等。本质上,这是一种多对多关系,实体可以有许多证书,证书可以分配给许多实体 我想做的是将其旋转,以便证书列表是列 Entity_ID | 1 | 2 | 3 | 4 | 1 | T

我有一张“证书考试”的表格,内容大致如下:

Entity_ID | Certificate_ID | CertificateExpiry
1         | 1              | dd/mm/YYYY
1         | 2              | dd/mm/YYYY
等等。本质上,这是一种多对多关系,实体可以有许多证书,证书可以分配给许多实体

我想做的是将其旋转,以便证书列表是列

Entity_ID | 1 | 2 | 3 | 4 |
1         | T | T | F | F |
2         | T | F | F | T |
我不能完全掌握如何做到这一点,所有的在线例子似乎表明,你需要计数,最大值,平均值等。理想情况下,我希望有到期的地方t/F,但如果这是不可能的,我可以理解

如果有人能帮我指出正确的方向,那就太好了。谢谢。

试试这个:

begin try
create table #test 
(Entity_ID int,Certificate_ID int,CertificateExpiry date)

insert into #test values(1,1,'01/01/2013')
insert into #test values(1,2,'05/01/2013')
insert into #test values(1,5,'01/05/2013')
insert into #test values(1,9,'05/12/2013')

insert into #test values(2,1,'10/05/2013')
insert into #test values(2,2,'12/03/2013')
insert into #test values(4,6,'2/05/2013')
insert into #test values(5,8,'4/09/2013')

--select * from #test

DECLARE @Certificate_Ids VARCHAR(8000)


SELECT @Certificate_Ids = COALESCE(@Certificate_Ids + '], [', '') + cast(Certificate_ID as varchar(20)) FROM 
(select distinct Certificate_ID from #test ) as a


Set @Certificate_Ids='['+@Certificate_Ids+']'

--print @Certificate_Ids


Declare @query varchar(max)


Set @query=
'SELECT
Entity_ID, ' + @Certificate_Ids + ' 
FROM #test
PIVOT
(
  MAX(CertificateExpiry)
  FOR Certificate_ID in (' + @Certificate_Ids + ' )   
) A'

print @query

exec(@query)


drop table #test
end try

begin catch
drop table #test
end catch

非常接近,谢谢。如果可能的话,我真的需要@Certificate\u id作为查询的一部分?我不明白。“1”、“2”、“3”、“4”不是输出中的证书id吗?是的,但我更喜欢一条SQL语句。目前,您有一个用于填充证书ID,然后有一个用于生成透视表。有可能将它们组合在一起吗?因为在某些C#代码中,我预先生成了证书ID列表,添加到[]中,并使用string.Format()将其插入到命令中,谢谢@FizzBuzz,因此您可以查看“@Certificate\u Ids”的值。相应地格式化字符串并将其作为参数传递。那么就不需要在SQL过程中查找“@Certificate\u id”。