博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
代码实现SQL Server动态行转列,不用存储过程
阅读量:7072 次
发布时间:2019-06-28

本文共 2665 字,大约阅读时间需要 8 分钟。

分两步查询,第一步查询出动态列,第二步使用PIVOT函数。

代码:

List
dataTableList = new List
();#region 指标DataTable dtEvaItemTitle = db.RunTable
(string.Format(@" select distinct eva.id, eva.name from Edu_EvaluationRecord r left join Edu_QnVolume v on r.queryid=v.id left join Sys_EvaluationItem eva on r.evaitemid=eva.id where v.id={0} order by eva.id", volumeEva.Id));List
evaItemTitleList = new List
();for (int i = 0; i < dtEvaItemTitle.Rows.Count; i++){ evaItemTitleList.Add(string.Format("[{0}]", dtEvaItemTitle.Rows[i]["name"].ToString()));}string evaItemTitles = String.Join(",", evaItemTitleList.ToArray());string sql = string.Format(@" select * from (select stu.name as 姓名,stu.StuNum as 学号,stu.ExamNum as 考号, case when stu.Sex='1' then '男' else '女' end as 姓别, case when stu.Brothers='1' then '否' else '是' end as 是否独生, stu.EduF as 父亲文化,stu.EduM as 母亲文化, r.score as 分数,eva.Name as 题目 from Edu_EvaluationRecord r left join Edu_Student stu on r.userid=stu.id left join Sys_User u on stu.userid=u.id left join Edu_QnVolume v on r.queryid=v.id left join Sys_EvaluationItem eva on r.evaitemid=eva.id where v.id={0}) p pivot (sum(分数) for 题目 in ({1})) as pvt", volumeEva.Id, evaItemTitles);DataTable dt = db.RunTable
(sql);dt.TableName = volumeEva.Name;dataTableList.Add(dt);#endregion#region 普通DataTable dtItemTitle = db.RunTable
(string.Format(@" select distinct s.id, s.title from edu_qnanswer ans left join Edu_QnSubject s on s.id=ans.subjectid left join Edu_QnVolume v on s.volumeid=v.id where v.id={0} order by s.id", volumeGeneral.Id));List
itemTitleList = new List
();for (int i = 0; i < dtItemTitle.Rows.Count; i++){ itemTitleList.Add(string.Format("[{0}]", dtItemTitle.Rows[i]["title"].ToString()));}string itemTitles = String.Join(",", itemTitleList.ToArray());sql = string.Format(@" select * from (select stu.name as 姓名,stu.StuNum as 学号,stu.ExamNum as 考号, case when stu.Sex='1' then '男' else '女' end as 姓别, case when stu.Brothers='1' then '否' else '是' end as 是否独生, stu.EduF as 父亲文化,stu.EduM as 母亲文化, ans.Answercontent as 选项,s.Title as 题目 from edu_qnanswer ans left join Sys_User u on ans.answerid=u.id left join Edu_Student stu on stu.userid=u.id left join Edu_QnSubject s on s.id=ans.subjectid left join Edu_QnVolume v on s.volumeid=v.id where v.id={0}) p pivot (max(选项) for 题目 in ({1})) as pvt", volumeGeneral.Id, itemTitles);dt = db.RunTable
(sql);dt.TableName = volumeGeneral.Name;dataTableList.Add(dt);#endregion
View Code

 

转载于:https://www.cnblogs.com/s0611163/p/5052978.html

你可能感兴趣的文章
关于OSPF协议
查看>>
基于lvs的持久性连接
查看>>
Highly Available L7 Load Balancing for Exchange 2013 with HAProxy – Par
查看>>
linux 如何查看电脑硬件信息
查看>>
Ciscodk——MB2-700变题了
查看>>
Linux手动启动、停止多个服务用的shell脚本
查看>>
centos下MySQL主从服务器设置
查看>>
ORA-12154 TNS:无法处理服务名
查看>>
groovy 环境搭建
查看>>
高性能的MySQL(6)查询执行机制(上)
查看>>
shell脚本变量和字符串截取
查看>>
网络安全之DSSDSA算法
查看>>
序列化和反序列化的概念
查看>>
Linux下防御DDOS攻击的操作梳理
查看>>
iOS获取手机与屏幕属性
查看>>
这家AI芯片独角兽吊打英伟达,吹捧还是硬实力?
查看>>
寒冬下2年android的搞笑求职历程
查看>>
19.Shell编程进阶,数组,字符串,(for,select,while read line)
查看>>
怎样快速将文字转换成语音?这种操作很简单
查看>>
Oracle 树操作 (select…start with…connect by…prior)
查看>>