SQL Server 2000交叉选项卡多个表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SQL Server 2000交叉选项卡多个表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2282字,纯文字阅读大概需要4分钟。
内容图文
![SQL Server 2000交叉选项卡多个表](/upload/InfoBanner/zyjiaocheng/885/06abe2153a094ee79759580b45bdc69d.jpg)
我有4个表,我想动态生成输出,但我需要表等级和运动表才能将其行转换为列.下表提供了示例数据.
学生
年级
注册
运动
这是我想要的输出:
输出显示的是在91级老师下就读的学生,并在sy 2014年显示了所有运动及其相应的年级.同样,我们使用的是SQL Server 2000(我认为我对此感到很遗憾).我已经尝试了很多在Internet上发现的查询,但是它不起作用..通常它是静态生成的(如果您已经知道要显示的列).
Cross Tab本身有点方便,并且我使用多个表使其变得更加复杂.我这个问题已经超过3个月了,但我仍然没有成功达到我想要的输出.顺便说一下,我在ASP.Net中的SqlDataSource上对其进行编码,并将其绑定在GridView上.
解决方法:
SQL 2000版本:
DECLARE @dynamicCols VARCHAR(8000);
SET @dynamicCols = '';
SELECT @dynamicCols = @dynamicCols+
', SUM(CASE WHEN sport.sportid='''+sportid+''' THEN grade.grade END) AS ['+sport+'] '
FROM sport
EXECUTE (
'SELECT student.idnumber AS ID, student.student AS Student '
+@dynamicCols+
'FROM student
JOIN grade on student.idnumber=grade.idnumber
JOIN enrol on enrol.sportid=grade.sportid
JOIN sport on sport.sportid=enrol.sportid
WHERE enrol.teacher=''91'' AND enrol.sy=''2014''
GROUP BY student.idnumber, student.student
ORDER BY student.student')
原始答案
好的,因为没有人上前,所以我将向您展示如何动态进行.
基于YOusaFZai’s template of doing it by hand,首先在select列表中创建动态项,然后将它们合并到select语句的其余部分,最后执行此动态语句:
DECLARE @sqlSTR VARCHAR(MAX);
DECLARE @dynamicCols VARCHAR(MAX);
SELECT @dynamicCols =
(
SELECT ', SUM(CASE WHEN sport.sportid='''+sportid+''' THEN grade.grade END) AS ['+sport+'] '
FROM sport
FOR XML PATH('')
)
--PRINT @dynamicCols
SELECT @sqlSTR =
'SELECT student.idnumber AS ID, student.student AS Student '+@dynamicCols+
'FROM student
JOIN grade on student.idnumber=grade.idnumber
JOIN enrol on enrol.sportid=grade.sportid
JOIN sport on sport.sportid=enrol.sportid
WHERE enrol.teacher=''91'' AND enrol.sy=''2014''
GROUP BY student.idnumber, student.student
ORDER BY student.student'
EXEC(@sqlSTR)
高级
有时您可能会期望有坏数据,并且可以保护自己.例如,如果成绩表可能具有不在运动表中的运动ID,则可以更改第一个查询,如下所示,以在结果中包括错误数据:
SELECT @dynamicCols =
(
SELECT DISTINCT ', SUM(CASE WHEN grade.sportid='''+grade.sportid+''' THEN grade.grade END) AS ['+ISNULL(sport.sport,'ILLEGAL ID #'+grade.sportid)+'] '
FROM grade
LEFT JOIN sport ON sport.sportid = grade.sportid
FOR XML PATH('')
)
内容总结
以上是互联网集市为您收集整理的SQL Server 2000交叉选项卡多个表全部内容,希望文章能够帮你解决SQL Server 2000交叉选项卡多个表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。