交叉表的实现,

表如下:
A    B
-------------
a   10
b   5
a   5
c   4
c   8

怎么用sql語句變成
a   b    c
---------
15    5    12

declare @sql varchar(8000)
set @sql=''
select @sql=@sql+'['+rtrim(A)+']=sum(case A when '''+rtrim(A)+''' then B else 0 end),'
from table1 group by A
set @sql=left(@sql,len(@sql)-1)
print @sql
exec('select '+@sql+ '  from table1')

create table jzlist(儿童 varchar(10),疫苗 varchar(10),预种日期 datetime)
insert into jzlist
select '武绍阳','卡介苗','2001-02-03'
union all select '武绍阳','糖 丸','2001-03-25'
union all select '武绍阳','乙 肝','2001-04-06'
union all select '宁 远','卡介苗','2002-08-03'
union all select '宁 远','糖 丸','2002-11-25'
union all select '宁 远','乙 肝','2002-12-23'
union all select '李小颖','卡介苗','2003-01-03'
union all select '李小颖','糖 丸','2003-04-26'
union all select '李小颖','乙 肝','2003-05-01'
go

--查询处理:
declare @s varchar(8000)
set @s=''
select @s=@s+',['+疫苗+']=max(case when 疫苗='''+疫苗+''' then convert(char(10),预种日期,120) end)'
from (select distinct 疫苗 from jzlist) aa
exec('select 儿童' +@s+' from jzlist group by 儿童')
go

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值