代码实现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),疾病名称) ...
随机推荐
- java提高篇(二四)-----HashSet
在前篇博文中(java提高篇(二三)-----HashMap)详细讲解了HashMap的实现过程,对于HashSet而言,它是基于HashMap来实现的,底层采用HashMap来保存元素. ...
- [51单片机] 以PWM控制直流电机为例建一个简单的51工程框架
目录 1)功能概述 2)引脚连接 3)框架介绍 4)模块说明 5)复用规则 6)工程链接 1)功能概述 名称:独立按键控制直流电机调速 内容:对应的电机接口需用杜邦线连接到uln2003电机控制端; ...
- HTTP学习笔记(五)
目前,市场上流行有很多web服务器软件,每种服务器都有自己的特点.我们在开发的过程中,经常要和它们打交道,所以了解它们的工作原理也是很重要的. 几款比较流行的服务器 它们会做些什么? 第三篇中有这样的 ...
- Atitit 修改密码的功能流程设计 attilax总结
Atitit 修改密码的功能流程设计 attilax总结 1.1. 注意点1 1.2. 设计修改用户密码功能时把用户ID保存在哪里?1 1.3. Ui设计1 1.4. 功能设计源码1 1.5. Agt ...
- fir.im Weekly - 如何做一个出色的程序员
做一个出色的程序员,困难而高尚.本期 fir.im Weekly 精选了一些实用的 iOS,Android 开发工具和源码分享,还有一些关于程序员的成长 Tips 和有意思有质量的线下活动~ How ...
- salesforce 零基础开发入门学习(十四)salesforce中工厂模式的运用
提到工厂模式,想必大家都很熟悉,工厂模式作为一种设计模式,同样在salesforce中适用. 举一个例子,笔作为基类,可以有钢笔,铅笔,圆珠笔等等.有一个笔的工厂,当你向它要钢笔,它就会生产一支钢笔; ...
- iOS-ARC项目使用非ARC文件 MRC项目使用ARC文件
SDK4.0引入了ARC,到现在已经好几年了,开始发现有很多项目会混合使用这两个方案.比如: 1.自己的旧项目没有使用ARC,但是引入的第三方库却是使用了ARC的. 2.自己的新项目使用了ARC,但是 ...
- git回滚到任意版本
git回滚到任意版本 先显示提交的log $ git log -3 commit 4dc08bb8996a6ee02f Author: Mark <xxx@xx.com> Date: We ...
- Python中的参数
Python中的参数 1. python函数参数有多重形式: * test(arg1,arg2,`*args`) * test(arg1,arg2,`*args`,`**kwargs`) 2. 其中比 ...
- java中IO流相关知识点
(一) 下边使用outputStream字节输出流进行写操作 package zdbIO;import java.io.File;import java.io.FileNotFoundExceptio ...