如何解决SQL Server 2008解析未知条目数
| 我不知道每个人将拥有多少门课程,或者由于可能的数量,课程的名称是什么,所以我不能使用普通的子选择或案例。 我有一张这样的桌子:ID NAME CLASS
----------------------
1 BOB Course1
1 BOB Course2
1 BOB Course3
2 JOHN Course1
2 JOHN Course2
3 SAM Course1
4 BILL Course2
4 BILL Course3
我想使它看起来像这样,最后一列是针对拥有最多类的人的:
ID NAME CLASS CLASS2 CLASS3 CLASS4..........
------------------------------------------------------
1 BOB Course1 Course2 Course3 NULL............
2 JOHN Course1 Course2 NULL NULL............
3 SAM Course1 NULL NULL NULL............
4 BILL Course2 Couse3 NULL NULL............
我最好的主意是继续获取最大CLASS并删除它,直到用完记录为止。
编辑:澄清:我的列标题将不是实际的课程,而只是一种编号老师分配给多少课程的方法。
解决方法
安倍的建议如下:
select * from Class
pivot (COUNT(ID) for CLASS in ([Course1],[Course2],[Course3])) as Taking
结果如下:
Name Course1 Course2 Course3
BILL 0 1 1
BOB 1 1 0
JOHN 1 1 0
SAM 1 0 0
当然,这与您想要的略有不同。您希望课程1具有“第一课程”的值。唯一的方法是使用动态SQL。
如果要用逗号分隔的课程列表(在一列中),则可以更轻松,更快速地生成课程。
逗号列表
select c.Name,STUFF((SELECT ( \',\' + c2.Class )
FROM #Class c2
WHERE c.Name = c2.Name
ORDER BY c2.Class
FOR XML PATH( \'\' )),1,2,\'\') as [Class List]
FROM #Class c
GROUP BY c.Name
给你:
Name Class List
BILL Course2,Course3
BOB Course1,Course2,Course3
JOHN Course1,Course2
SAM Course1
,您可以看看使用PIVOT
在此处了解更多信息:
http://msdn.microsoft.com/en-us/library/ms177410.aspx
我相信您可以在ID上使用MAX作为汇总函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。