日期:2014-05-19  浏览次数:20535 次

在线等待一条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
*/