2006-07-26 4 401 全清真 719.90
2006-07-26 4 402 郭家军 974.50
2006-07-26 4 403 单岩斌 1139.50
2006-07-26 4 404 李绍琨 1492.10
2006-07-26 4 405 李春光 1717.80
2006-07-26 4 406 徐德林 1345.90
2006-07-26 4 407 王毅 1564.80
2006-07-26 4 408 华德峰 1314.90
2006-07-26 4 409 张义波 1392.70
2006-07-26 4 410 关龙国 1489.80
2006-07-26 4 411 曲连言 802.50
2006-07-26 4 412 崔玉君 1376.50
2006-07-26 4 413 王洪海 1439.70
2006-07-26 4 414 肖云飞 1169.50
2006-07-26 4 415 刘德江 1403.60
2006-07-26 4 416 张保全 1087.50
2006-07-26 4 417 殷继明 1301.70
2006-07-26 4 418 孙茂辉 1379.50
2006-07-26 4 419 马永刚 1099.50
2006-07-26 4 420 尹作维 1353.80
2006-07-26 4 421 周国明 1193.80
2006-07-26 4 422 王格 1085.50
2006-07-26 4 423 崔玉强 916.90
2006-07-26 4 424 董承波 1124.70
2006-07-26 4 425 刘万世 1619.30
2006-07-26 4 426 丁国虎 姜洋 1397.20
2006-07-26 6 601 孔庆武 815.70
2006-07-26 6 602 曹成辉 702.50
2006-07-26 6 603 于德胜 孙安玉 730.10
2006-07-26 6 604 梁萌 王永斌 851.40
2006-07-26 6 605 王东旭 侯秉志 887.20
2006-07-26 6 606 焉德财 808.70
2006-07-26 6 607 王刚 946.40
2006-07-26 6 608 林世梵 .00
2006-07-26 6 609 王景峰 798.70
2006-07-26 6 610 蔡源禄 904.70
2006-07-26 6 611 杜福利 742.10
2006-07-26 6 612 王晓明 645.30
2006-07-26 6 613 佟宝贵 882.20
2006-07-26 6 614 靳文凯 224.00
2006-07-26 6 615 林景奎 817.00
2006-07-26 6 616 陈立滨 785.50
2006-07-26 7 701 鞠彬 841.50
2006-07-26 7 702 杜洪晨 680.10
2006-07-26 7 703 王东 1048.80
2006-07-26 7 704 张家君 875.50
2006-07-26 7 705 王国峰 1256.30
2006-07-26 7 706 江世纪 程宪锋 779.30
2006-07-26 7 707 白风林 973.60
2006-07-26 7 708 柯永军 1082.70
2006-07-26 7 709 王洪波 1202.40
2006-07-26 7 710 常贵彬 1009.30
2006-07-26 7 711 刘宇帅 670.80
2006-07-26 7 712 杨铭枝 1111.30
2006-07-26 7 713 隋艳波 徐卫东 1047.30
2006-07-26 7 714 王成福 879.60
2006-07-26 7 715 董长河 922.60
2006-07-26 7 716 孙洪国 杨渤 966.00
2006-07-26 7 717 宋元锋 649.50
2006-07-26 7 718 许明 1015.20
2006-07-26 7 719 于祥升 773.20
2006-07-26 7 720 陶增义 1014.90
2006-07-26 7 721 王杰 1009.60
2006-07-26 7 722 孔繁田 1072.90
2006-07-27 1 101 宋平 高涛 532.00
2006-07-27 1 102 王庆斌 589.50
2006-07-27 1 103 刘春刚 593.60
2006-07-27 1 104 李鹏 757.30
2006-07-27 1 105 王庆 .00
2006-07-27 1 106 田俊林 582.30
2006-07-27 1 107 赵春辉 650.50
2006-07-27 1 108 郑福金 647.60
2006-07-27 1 109 张佑锋 672.00
......
现在想列出如下的两种格式应该如何实现呢?格式一 :
1路;
日期 101 102 103 104 ..... 118
2006-07-26 yye yye yye yye ......
2006-07-27 yye yye yye yye ......
...
2006-08-25 yye yye yye yye ......3路4路6路7路与1路格式相同,每次只列出一路就可以了。xl里只有1,3,4,6,7这几路数据。格式二:
1路日期 董克卫 高宏林 高涛 ...... 郑福金
2006-07-26 yye yye yye yye ......
2006-07-27 yye yye yye yye ......
...
2006-08-25 yye yye yye yye ......
其他路与1路显示格式相同。
请教各位大虾怎么实现?
2006-07-26 4 402 郭家军 974.50
2006-07-26 4 403 单岩斌 1139.50
2006-07-26 4 404 李绍琨 1492.10
2006-07-26 4 405 李春光 1717.80
2006-07-26 4 406 徐德林 1345.90
2006-07-26 4 407 王毅 1564.80
2006-07-26 4 408 华德峰 1314.90
2006-07-26 4 409 张义波 1392.70
2006-07-26 4 410 关龙国 1489.80
2006-07-26 4 411 曲连言 802.50
2006-07-26 4 412 崔玉君 1376.50
2006-07-26 4 413 王洪海 1439.70
2006-07-26 4 414 肖云飞 1169.50
2006-07-26 4 415 刘德江 1403.60
2006-07-26 4 416 张保全 1087.50
2006-07-26 4 417 殷继明 1301.70
2006-07-26 4 418 孙茂辉 1379.50
2006-07-26 4 419 马永刚 1099.50
2006-07-26 4 420 尹作维 1353.80
2006-07-26 4 421 周国明 1193.80
2006-07-26 4 422 王格 1085.50
2006-07-26 4 423 崔玉强 916.90
2006-07-26 4 424 董承波 1124.70
2006-07-26 4 425 刘万世 1619.30
2006-07-26 4 426 丁国虎 姜洋 1397.20
2006-07-26 6 601 孔庆武 815.70
2006-07-26 6 602 曹成辉 702.50
2006-07-26 6 603 于德胜 孙安玉 730.10
2006-07-26 6 604 梁萌 王永斌 851.40
2006-07-26 6 605 王东旭 侯秉志 887.20
2006-07-26 6 606 焉德财 808.70
2006-07-26 6 607 王刚 946.40
2006-07-26 6 608 林世梵 .00
2006-07-26 6 609 王景峰 798.70
2006-07-26 6 610 蔡源禄 904.70
2006-07-26 6 611 杜福利 742.10
2006-07-26 6 612 王晓明 645.30
2006-07-26 6 613 佟宝贵 882.20
2006-07-26 6 614 靳文凯 224.00
2006-07-26 6 615 林景奎 817.00
2006-07-26 6 616 陈立滨 785.50
2006-07-26 7 701 鞠彬 841.50
2006-07-26 7 702 杜洪晨 680.10
2006-07-26 7 703 王东 1048.80
2006-07-26 7 704 张家君 875.50
2006-07-26 7 705 王国峰 1256.30
2006-07-26 7 706 江世纪 程宪锋 779.30
2006-07-26 7 707 白风林 973.60
2006-07-26 7 708 柯永军 1082.70
2006-07-26 7 709 王洪波 1202.40
2006-07-26 7 710 常贵彬 1009.30
2006-07-26 7 711 刘宇帅 670.80
2006-07-26 7 712 杨铭枝 1111.30
2006-07-26 7 713 隋艳波 徐卫东 1047.30
2006-07-26 7 714 王成福 879.60
2006-07-26 7 715 董长河 922.60
2006-07-26 7 716 孙洪国 杨渤 966.00
2006-07-26 7 717 宋元锋 649.50
2006-07-26 7 718 许明 1015.20
2006-07-26 7 719 于祥升 773.20
2006-07-26 7 720 陶增义 1014.90
2006-07-26 7 721 王杰 1009.60
2006-07-26 7 722 孔繁田 1072.90
2006-07-27 1 101 宋平 高涛 532.00
2006-07-27 1 102 王庆斌 589.50
2006-07-27 1 103 刘春刚 593.60
2006-07-27 1 104 李鹏 757.30
2006-07-27 1 105 王庆 .00
2006-07-27 1 106 田俊林 582.30
2006-07-27 1 107 赵春辉 650.50
2006-07-27 1 108 郑福金 647.60
2006-07-27 1 109 张佑锋 672.00
......
现在想列出如下的两种格式应该如何实现呢?格式一 :
1路;
日期 101 102 103 104 ..... 118
2006-07-26 yye yye yye yye ......
2006-07-27 yye yye yye yye ......
...
2006-08-25 yye yye yye yye ......3路4路6路7路与1路格式相同,每次只列出一路就可以了。xl里只有1,3,4,6,7这几路数据。格式二:
1路日期 董克卫 高宏林 高涛 ...... 郑福金
2006-07-26 yye yye yye yye ......
2006-07-27 yye yye yye yye ......
...
2006-08-25 yye yye yye yye ......
其他路与1路显示格式相同。
请教各位大虾怎么实现?
假设有张学生成绩表(tb_rowtocol)如下
Name Subject Result
张三 语文 73
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94想变成
姓名 语文 数学 物理
张三 73 83 93
李四 74 84 94declare @sql varchar(4000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from rowtocol) as a
set @sql = @sql + ' from rowtocol group by name'
exec(@sql)
如果上述两表互相换一下:即
表名(cj)
姓名 语文 数学 物理
张三 73 83 93
李四 74 84 94想变成 Name Subject Result
张三 语文 73
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94select 姓名 as Name,'语文' as Subject,语文 as Result from CJ union
select 姓名 as Name,'数学' as Subject,数学 as Result from CJ union
select 姓名 as Name,'物理' as Subject,物理 as Result from CJ
order by 姓名 desc
有表rowtocol,其数据如下:
a b
1 1
1 2
1 3
2 1
2 2
3 1
如何转换成如下结果:
a b
1 1,2,3
2 1,2
3 1 创建一个合并的函数 create function f_rowtocol(@a int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str = ''
select @str = @str + ',' + cast(b as varchar) from rowtocol where a = @a
set @str = right(@str , len(@str) - 1)
return(@str)
End
go
调用自定义函数得到结果:
select distinct a ,dbo.f_rowtocol(a) from rowtocol
例如有表A某些人每月消费数据如下:
id data month
001 11 1
001 12 2
001 13 3
001 14 4
001 15 5
001 16 6
001 17 7
001 18 8
001 19 9
001 110 10
001 111 11
001 112 12
002 21 1
002 22 2
002 23 3
002 24 4
002 25 5
002 26 6
002 27 7
002 28 8
002 29 9
002 210 10
002 211 11
002 212 12
要实现如下结果:
第一个: SELECT id as '人员' ,
SUM(CASE month WHEN 1 THEN data ELSE 0 END) AS '1月' ,
SUM(CASE month WHEN 2 THEN data ELSE 0 END) AS '2月' ,
SUM(CASE month WHEN 3 THEN data ELSE 0 END) AS '3月' ,
SUM(CASE month WHEN 4 THEN data ELSE 0 END) AS '4月' ,
SUM(CASE month WHEN 5 THEN data ELSE 0 END) AS '5月' ,
SUM(CASE month WHEN 6 THEN data ELSE 0 END) AS '6月' ,
SUM(CASE month WHEN 7 THEN data ELSE 0 END) AS '7月' ,
SUM(CASE month WHEN 8 THEN data ELSE 0 END) AS '8月' ,
SUM(CASE month WHEN 9 THEN data ELSE 0 END) AS '9月' ,
SUM(CASE month WHEN 10 THEN data ELSE 0 END) AS '10月' ,
SUM(CASE month WHEN 11 THEN data ELSE 0 END) AS '11月' ,
SUM(CASE month WHEN 12 THEN data ELSE 0 END) AS '12月'
FROM a
GROUP BY ID
第二个: SELECT id as '人员' ,
SUM(CASE month WHEN 1 THEN data ELSE 0 END) AS '1月' ,
SUM(CASE month WHEN 2 THEN data ELSE 0 END) AS '2月' ,
SUM(CASE month WHEN 3 THEN data ELSE 0 END) AS '3月' ,
SUM(CASE month WHEN 4 THEN data ELSE 0 END) AS '4月' ,
SUM(CASE month WHEN 5 THEN data ELSE 0 END) AS '5月' ,
SUM(CASE month WHEN 6 THEN data ELSE 0 END) AS '6月' ,
SUM(CASE month WHEN 7 THEN data ELSE 0 END) AS '7月' ,
SUM(CASE month WHEN 8 THEN data ELSE 0 END) AS '8月' ,
SUM(CASE month WHEN 9 THEN data ELSE 0 END) AS '9月' ,
SUM(CASE month WHEN 10 THEN data ELSE 0 END) AS '10月' ,
SUM(CASE month WHEN 11 THEN data ELSE 0 END) AS '11月' ,
SUM(CASE month WHEN 12 THEN data ELSE 0 END) AS '12月' ,
SUM(data) as '合计'
FROM a
GROUP BY ID
declare @sql varchar(4000)
declare @xl varchar(1)
declare @rq_s varchar(10)
declare @rq_e varchar(10)
set @xl='4'
set @rq_s='2006-07-26'
set @rq_e='2006-08-25'
set @sql = 'select rq as ' + 'rq'
select @sql = @sql + ' , sum(case yyhm when '''+yyhm+''' then yhck end) ['+yyhm+']'
from (select distinct yyhm from yy_ryye where xl=@xl and substring(yyhm,1,1)=@xl) as a
set @sql = @sql + ' from yy_ryye where rq>='''+@rq_s+'''and rq<='''+@rq_e+ '''group by rq order by rq'
exec(@sql)
我的数据没有按yyhm的顺序排序,为什么呢?
我想把其中的一条语句写成这样,但是有错误,不知道应该怎么写呢?
(select distinct yyhm from yy_ryye where xl=@xl and substring(yyhm,1,1)=@xl)
改成:
(select distinct yyhm from yy_ryye where xl=@xl and substring(yyhm,1,1)=@xl order by yyhm)
出现如下错误:
服务器: 消息 1033,级别 15,状态 1,行 10
除非同时指定了 TOP,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。
declare @sql varchar(4000)
declare @xl varchar(1)
declare @rq_s varchar(10)
declare @rq_e varchar(10)
set @xl='4'
set @rq_s='2006-07-26'
set @rq_e='2006-08-25'
set @sql = 'select rq as ' + 'rq'
select @sql = @sql + ' , sum(case yyhm when '''+yyhm+''' then yhck end) ['+yyhm+']'
from (select distinct yyhm from yy_ryye where xl=@xl and substring(yyhm,1,1)=@xl) as a order by yyhm
set @sql = @sql + ' from yy_ryye where rq>='''+@rq_s+'''and rq<='''+@rq_e+ '''group by rq order by rq'
exec(@sql)
declare @xl varchar(1)
declare @rq_s varchar(10)
declare @rq_e varchar(10)
set @xl='6'
set @rq_s='2006-07-26'
set @rq_e='2006-08-25'set @sql = 'select xl as '+'xl,'+'jsy1 as ' + 'jsy1'
select @sql = @sql + ' , sum(case convert(varchar(10),rq,120) when '''+convert(varchar(10),rq,120)+''' then yhck else 0 end) ['+convert(varchar(2),day(rq))+']'
from (select distinct rq from yy_ryye where rq>=@rq_s and rq<=@rq_e) as a order by rq
set @sql = @sql + ' from yy_ryye where rq>='''+@rq_s+'''and rq<='''+@rq_e+ '''group by xl,jsy1 order by xl,jsy1'
exec(@sql)
以上这条可以改成一条SQL语句吗?
vb里面要 rs绑定就可以了..
.net 就要ds绑定
select .... into 临时表
然后再对临时表处理
可是我写成了这样但是没有发现临时表为什么呢?
declare @sql varchar(4000)
declare @xl varchar(1)
declare @rq_s varchar(10)
declare @rq_e varchar(10)
set @xl='6'
set @rq_s='2006/07/26'
set @rq_e='2006/08/25'set @sql = 'select xl,jsy1,yyhm'
select @sql = @sql + ' , sum(case convert(varchar(10),rq,120) when '''+convert(varchar(10),rq,120)+''' then yhck else 0 end) ['+convert(varchar(2),day(rq))+']'
from (select distinct rq from yy_ryye where rq>=@rq_s and rq<=@rq_e) as a order by rq
set @sql = @sql + 'into #temp from yy_ryye where rq>='''+@rq_s+'''and rq<='''+@rq_e+ '''group by xl,jsy1,yyhm order by xl,jsy1,yyhm'
print @sql
exec(@sql) 但是未传入临时表呢?
臨時表有作用域的,這個臨時表只在EXEC內部有效,改用全局臨時表。
因为exec运行时另外开辟一块内存空间