现在表: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语句实现,请求帮助!!多谢!
字段: 客户号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语句实现,请求帮助!!多谢!
改為
group by cardno
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 行)
*/
insert into tbl values('1001', '1')
insert into tbl values('1001', '2')
godeclare @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
*/