代码实现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 = 0; i < dtEvaItemTitle.Rows.Count; i++)
{
    evaItemTitleList.Add("[{0}]",dtEvaItemTitle.Rows[i][name].ToString()));
}
string evaItemTitles = String.Join(string sql = 
    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(sql);
dt.TableName = volumeEva.Name;
dataTableList.Add(dt);
#endregion

#region 普通
DataTable dtItemTitle = db.RunTable<Edu_EvaluationRecord>(
    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.idstring> itemTitleList = 0; i < dtItemTitle.Rows.Count; i++)
{
    itemTitleList.Add(titlestring itemTitles = String.Join( volumeGeneral.Name;
dataTableList.Add(dt);
#endregion
View Code

 

相关文章

本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的...
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中...
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册...
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看...