代码实现SQL Server动态行转列,不用存储过程
分两步查询,第一步查询出动态列,第二步使用PIVOT函数。
代码:
List<DataTable> dataTableList = new List<DataTable>(); #region 指标
DataTable dtEvaItemTitle = db.RunTable<Edu_EvaluationRecord>(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<string> evaItemTitleList = new List<string>();
for (int i = ; 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<Edu_EvaluationRecord>(sql);
dt.TableName = volumeEva.Name;
dataTableList.Add(dt);
#endregion #region 普通
DataTable dtItemTitle = db.RunTable<Edu_EvaluationRecord>(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<string> itemTitleList = new List<string>();
for (int i = ; 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<Edu_EvaluationRecord>(sql);
dt.TableName = volumeGeneral.Name;
dataTableList.Add(dt);
#endregion
代码实现SQL Server动态行转列,不用存储过程的更多相关文章
- SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...
- SQL Server 动态行转列(轉載)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段; 方法二:使用拼接SQL, ...
- SQL server 动态行转列
用聚合函数配合CASE语句实现行转列功能: 现在分享一下具体实现代码: 转换前效果: PlanName PlanType PlanLimit 计划1 计划类型1 RMB 1,000,000 计划1 计 ...
- 转:SQL Server 动态行转列
http://www.cnblogs.com/gaizai/p/3753296.html http://www.cnblogs.com/maanshancss/archive/2013/03/13/2 ...
- 老生常谈之SQL Server (行转列,列转行)
Open the first article 在本文章中主要介绍以下内容: 1.静态行转列 2.静态列转行 3.动态行转列 4.动态列转行 1.静态行转列 --静态的行转列 --新建一个科目成绩表 - ...
- SQL Server pivot 行转列遇到的问题
前段时间开发系统时,有个功能是动态加载列,于是就使用了SQL Server自带的PIVOT函数进行行转列,开始用的非常溜,效果非常好.但是提交测试后问题来了,测试添加的列名中包含空格,然后就杯具了,功 ...
- SQL SERVER特殊行转列案列一则
今天有个同事找我,他说他有个需求,需要进行行转列,但是又跟一般的行转列有些区别,具体需求如下所说,需要将表1的数据转换为表2的显示格式. 我想了一下,给出了一个解决方法,具体如下所示(先给出测试数据) ...
- sql server 2005+ 行转列
)) , 'aa') , 'bb') , 'aaa') , 'bbb') , 'ccc') go , , '') from tb group by id
- sql server数据库行转列及巧用case when、和row_number用法例子
select 身份证号码, MAX(t.单位编号) 单位编号, MAX(t.姓名) 姓名, MAX(case when t.rows=1 then convert(varchar(max),疾病名称) ...
随机推荐
- 设计模式之美:Null Object(空对象)
索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Null Object 的示例实现. 意图 通过对缺失对象的封装,以提供默认无任何行为的对象替代品. Encapsulate t ...
- dijit样式定制(三)Button、RadioButton、CheckBox
dijit.form.DropDownButton dijit的button中除了ComboButton使用table布局外,其他的button都是用span嵌套布局,下图中可看一下button的主要 ...
- JavaScript思维导图—数组
JavaScript思维导图-来自@王子墨http://julying.com/blog/the-features-of-javascript-language-summary-maps/
- 剑英陪你玩转图形学(五)focus
很久没来和大家交流业务(zhuangbi)水平了,最近实在是很忙,报名了小游戏大赛,一点时间都抽不出,已经坑了. 今天抓紧时间和大家介绍一个小效果: 新手引导的时候,我们会需要一种全屏幕黑掉,只有一个 ...
- Unity3D热更新全书-脚本(四) 用C#LightEvil搭建实际开发使用的脚本框架
C#LightEvil之前提供了很多和Unity结合的例子,都是采用把脚本文件放置在StreamingAssets中的方法. 这样可以利用Unity的特性,放在这个目录中的CS文件会被编译器编译,我们 ...
- Git Day03,GitHub 1st
1st, SSH key: Add a pic @ Sep 18 2016 20:26 To note the configuration process on Linux: 2nd,github网站 ...
- 开发人员应该对IIS理论层的知识了解的多一些~第四讲 HttpModule中的几大事件
返回目录 本文主要介绍HttpModule,它在一个网页请求过程中是一个怎样的过程是我们要知道的,在网页加载过程中HttpModule在何时被执行也是我们要知道的,以及,HttpModule在网页请求 ...
- Java线程:线程的交互
一.线程交互的基础知识 SCJP所要求的线程交互知识点需要从java.lang.Object的类的三个方法来学习: void notify() 唤醒在此对象监视器上等 ...
- atitit。企业的价值观 员工第一 vs 客户第一.docx
atitit.企业的价值观 员工第一 vs 客户第一.docx 1. 客户第一的说法是错误的,员工优先是正确的,理念与价值观1 1.1. 任何一个组织,应该组织成员优先级要比外部成员高才对1 1.2. ...
- 常用 sql
一. sql 多个字段拼接 mysql: 1. concat函数 如果连接串中存在NULL,则返回结果为NULL: 例如: select concat('1','2','3') ...