现在表: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语句实现,请求帮助!!多谢!

解决方案 »

  1.   

    group by 1
    改為
    group by cardno
      

  2.   

    --创建测试数据
    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 行)
    */
      

  3.   

    create table tbl(cardno varchar(10),jylx char(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
    */