日期       操作员     客户号       街道      计量方式       收款额     
2008-7-3   A         0010      北京路     有表           150
2008-7-3   A         0050       上海路     有表           150
2008-7-3   A         0710      北京路     无表           100
2008-7-3   C         0910      南京路     有表           100
2008-7-3   A         0970      南京路     有表           100
2008-7-3   A         0060      北京路     有表           100
2008-7-3   E         0050      上海路     有表           150
2008-7-3   A         0720      北京路     无表           100
2008-7-3   C         0930      南京路     有表           100
...........
...........要求统计成如下格式
 
   日期      操作员      街道        有表收款额   无表收款额       收款客户数
 2008-7-3     A         北京路       250            200             4
 2008-7-3    A        上海路      150            0               1
 2008-7-3    A        南京路       100            0               1
 2008-7-3    c        北京路       ...            ...             ...
 2008-7-3    c        上海路       ...            ...             ...
 2008-7-3    c        南京路       ...            ...             ...
.................
就是要统计出 不同日期、不同操作员在不同街道分别收取的有表和无表款。sql 中该如何查询?

解决方案 »

  1.   

    select 
    日期,      
    操作员,         
    街道,
    [有表收款额]=sum(case when  [计量方式]=N'有表' then  收款额  else 0 end), 
    [无表收款额]=sum(case when  [计量方式]=N'无表' then  收款额  else 0 end), 
    [收款额]=count(客户号)  
    from 
    Table1
    group by 日期,操作员,街道
      

  2.   

    select 日期,  操作员, 街道,
        [有表收款额]=sum(case when  [计量方式]=N'有表' then  收款额  else 0 end), 
        [无表收款额]=sum(case when  [计量方式]=N'无表' then  收款额  else 0 end), 
        [收款额]=count(客户号)  
    from Tb
    group by 日期,操作员,街道
      

  3.   

    select 
        日期,      
        操作员,         
        街道,
        [有表收款额]=sum(case when  [计量方式]='有表' then  收款额  else 0 end), 
        [无表收款额]=sum(case when  [计量方式]='无表' then  收款额  else 0 end), 
        [收款额]=count(*)  
    from 
        Table1
    group by 日期,操作员,街道
      

  4.   

    DECLARE @TB TABLE(日期 DATETIME,操作员 VARCHAR(5),客户号 VARCHAR(10),街道 VARCHAR(20),计量方式 VARCHAR(10),收款额 INT) 
    INSERT INTO @TB SELECT '2008-7-3','A','0010','北京路','有表',150 
    UNION ALL SELECT '2008-7-3','A','0050','上海路','有表',150 
    UNION ALL SELECT '2008-7-3','A','0710','北京路','无表',100 
    UNION ALL SELECT '2008-7-3','C','0910','南京路','有表',100 
    UNION ALL SELECT '2008-7-3','A','0970','南京路','有表',100 
    UNION ALL SELECT '2008-7-3','A','0060','北京路','有表',100 
    UNION ALL SELECT '2008-7-3','E','0050','上海路','有表',150 
    UNION ALL SELECT '2008-7-3','A','0720','北京路','无表',100 
    UNION ALL SELECT '2008-7-3','C','0930','南京路','有表',100 
       SELECT 
        日期,      
        操作员,         
        街道,
        有表收款额=sum(case when  计量方式=N'有表' then  收款额  else 0 end), 
        无表收款额=sum(case when  计量方式=N'无表' then  收款额  else 0 end), 
        收款=count(客户号)  
    FROM  
        @TB
    GROUP BY  日期,操作员,街道
    /*
    日期                                                     操作员   街道                   有表收款额       无表收款额       收款          
    ------------------------------------------------------ ----- -------------------- ----------- ----------- ----------- 
    2008-07-03 00:00:00.000                                A     北京路                  250         200         4
    2008-07-03 00:00:00.000                                A     南京路                  100         0           1
    2008-07-03 00:00:00.000                                A     上海路                  150         0           1
    2008-07-03 00:00:00.000                                C     南京路                  200         0           2
    2008-07-03 00:00:00.000                                E     上海路                  150         0           1(所影响的行数为 5 行)
    */
      

  5.   

    select 日期,  操作员, 街道, 
        [有表收款额]=sum(case when  [计量方式]=N'有表' then  收款额  else 0 end), 
        [无表收款额]=sum(case when  [计量方式]=N'无表' then  收款额  else 0 end), 
        [收款额]=count(客户号)  
    from Tb 
    group by 日期,操作员,街道