动态SQL,交叉表例子
2010-02-01 18:54
204 查看
感觉就是把竖着的N条记录,查成横向的很多列,搬个例子记录下。
思路:通过查询原表的记录,动态去构造一个varchar变量,然后调用exec(),执行该变量中的sql语句。
原始表格式如下:
根据Class的值,按日期分别统计出CallCount1,CallCount2,CallCount3。
当该日期无记录时值为0。要求合并成如下格式:
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
--结果
思路:通过查询原表的记录,动态去构造一个varchar变量,然后调用exec(),执行该变量中的sql语句。
原始表格式如下:
Class | CallDate | CallCount |
1 | 2005-8-8 | 40 |
1 | 2005-8-7 | 6 |
2 | 2005-8-8 | 77 |
2 | 2005-8-9 | 33 |
3 | 2005-8-8 | 9 |
3 | 2005-8-7 | 21 |
当该日期无记录时值为0。要求合并成如下格式:
CallDate | CallCount1 | CallCount2 | CallCount3 |
2005-8-9 | 0 | 0 | 33 |
2005-8-8 | 40 | 77 | 9 |
2005-8-7 | 6 | 0 | 21 |
--创建测试环境[code]CreatetableT(Classvarchar(2),CallDatedatetime,CallCountint)
insertintoTselect'1','2005-8-8',40
unionallselect'1','2005-8-7',6
unionallselect'2','2005-8-8',77
unionallselect'3','2005-8-9',33
unionallselect'3','2005-8-8',9
unionallselect'3','2005-8-7',21
--动态SQL
declare@svarchar(8000)
set@s='selectCallDate'
select@s=
@s+',[CallCount'+Class+']=sum(casewhenClass='''+Class+'''thenCallCountelse0end)'
fromTgroupbyClass
set@s=@s+'fromTgroupbyCallDateorderbyCallDatedesc'
exec(@s)
--删除测试环境
droptableT
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
--结果
CallDate | CallCount1 | CallCount2 | CallCount3 |
2005-08-0900:00:00.000 | 0 | 0 | 33 |
2005-08-0800:00:00.000 | 40 | 77 | 9 |
2005-08-0700:00:00.000 | 6 | 0 | 21 |
相关文章推荐
- 例子:动态SQL中使用临时表
- 动态sql例子
- 动态SQL和动态游标的例子
- mysql 存储过程动态执行sql 例子
- hibernate查询方式:HQL、SQL、Criteria方法、命名、动态分离查询、例子查询
- 动态SQL的使用例子, 行列转换.
- 一个动态sql的例子
- 动态Sql的例子
- Oracle 动态sql小例子
- Mybatis的动态SQL讲解(以职工表为例子)
- DB2中执行动态SQL的例子
- hibernate查询方式:HQL、SQL、Criteria方法、命名、动态分离查询、例子查询
- MyBatis中的动态SQL例子
- Postgresql:动态sql的例子
- 动态SQL的使用例子, 行列转换.
- 在PL/SQL中使用游标、动态sql和绑定变量的小例子
- 行列转换-->动态SQL语句例子
- SQL动态生成交叉表应用范例
- mysql 存储过程 动态sql例子
- sql行列转换例子(动态)