在线等待一条sql语句
现在表:tbl
字段: 客户号cardno 交易类型jylx
数据为:
1001 1
1001 2
需求:同一个客户发生的交易类型不同,现对客户交易单的个数进行统计.
要求结果:
客户号 交易类型1 交易类型2
1001 1 1
本人目前实现的方法:
select cardno,count(case jylx when '1 ' then jylx end) as jylx_one,count(case jylx when '2 ' then jylx end) as jylx_two from tbl group by 1
但实的结果为:
客户号 交易类型1 交易类型2
1001 1
1001 1
我现在想用一条sql语句实现,请求帮助!!多谢!
------解决方案----------------------创建测试数据
create table tbl(cardno varchar(10),jylx char(1))
insert into tbl
select '1001 ', '1 '
union all select '1001 ', '2 '
--查询
select cardno,
sum(case when jylx= '1 ' then 1 else 0 end) as jylx_one,
sum(case when jylx= '2 ' then 1 else 0 end) as jylx_two
from tbl
group by cardno
--结果
/*
cardno jylx_one jylx_two
---------- ----------- -----------
1001 1 1
(所影响的行数为 1 行)
*/
------解决方案--------------------create table tbl(cardno varchar(10),jylx char(1))
insert into tbl values( '1001 ', '1 ')
insert into tbl values( '1001 ', '2 ')
go
declare @sql varchar(8000)
set @sql = 'select cardno '
select @sql = @sql + ' , sum(case jylx when ' ' ' + jylx + ' ' ' then 1 else 0 end) [交易类型 ' + jylx + '] '
from (select distinct jylx from tbl) as a
set @sql = @sql + ' from tbl group by cardno '
exec(@sql)
drop table tbl
/*
cardno 交易类型1 交易类型2
---------- ----------- -----------
1001 1 1
*/