SELECT customername, 
      CASE ocname WHEN '结帐' THEN (CASE state WHEN '1' THEN SUM(totaloc) 
      ELSE 0 END) ELSE 0 END AS 结账, 
      CASE ocname WHEN '销售' THEN (CASE state WHEN '1' THEN SUM(totaloc) 
      ELSE 0 END) ELSE 0 END AS 销售
FROM dbo.View_totaldata
GROUP BY customername, ocname, state销售可以统计出来,结账就无法统计出来,全部是0,帮忙分析一下问题可能出在哪儿?

解决方案 »

  1.   

    这个case写的,你不如给点数据
      

  2.   


    SELECT customername,  
      SUM(CASE ocname WHEN '结帐' THEN (CASE state WHEN '1' THEN totaloc  
      ELSE 0 END) ELSE 0 END) AS 结账,  
      SUM(CASE ocname WHEN '销售' THEN (CASE state WHEN '1' THEN totaloc  
      ELSE 0 END) ELSE 0 END) AS 销售
    FROM dbo.View_totaldata
    GROUP BY customername, ocname, state
      

  3.   


    SELECT customername,  
      SUM(CASE WHEN ocname = N'结帐' AND state = '1' THEN isnull(totaloc,0) ELSE 0 END) AS 结账,  
      SUM(CASE WHEN ocname = N'销售' AND state = '1' THEN isnull(totaloc,0) ELSE 0 END) AS 销售
    FROM dbo.View_totaldata
    GROUP BY customername, ocname, state
      

  4.   

    GROUP BY customername  后边两个可以去了!
      

  5.   

    customername ocname totaloc state
    21001     销售       4   0
    21001          销售     29   1
    21001          结账     4   0
    21001          结账     6   1
    数据例子
      

  6.   

    select customername,sum(case when ocname='结帐' and state=1 then totaloc else 0 end),
                        sum(case when ocname='销售' and state=1 then totaloc else 0 end)
    from tb group by customername
      

  7.   

    ocname还包括盘点,查询等,这些都可以SUM出来,只有结帐无法汇总
      

  8.   

    有可能你的字段类型是 Nvarchar的所以  when N'结账'
      

  9.   

    FROM dbo.View_totaldata是视图,如果将例子数据输入一个新表中,结帐是可以统计出来的。
    现在的问题会是与结帐这两个字有关吗?它的原始类型是VARCHAR(20),连接过程中应该不会有空字符的问题吧,关健是其它OCNAME与它来源也是一样的。
      

  10.   

    以前结帐的类型是char(20),我在结帐后加空格就解决过,类似when ocname='结帐       ',现在改为VARCHAR,加不加空格都无法解决了
      

  11.   

    没有错,因为lz的字写错了,是“结账”不是“结帐”
    use tempdb;
    /*
    create table B
    (
    customername nvarchar(10) not null,
    ocname nvarchar(10) not null,
    totaloc int not null,
    [state] int not null
    );
    insert into B(customername,ocname,totaloc,[state])
    values
    ('21001','销售',4,0),
    ('21001','销售',29,1),
    ('21001','结账',4,0),
    ('21001','结账',6,1);
    */
    SELECT customername, 
      CASE ocname WHEN N'结账' THEN (CASE [state] WHEN 1 THEN SUM(totaloc) ELSE 0 END) ELSE 0 END AS 结账,
      CASE ocname WHEN N'销售' THEN (CASE [state] WHEN 1 THEN SUM(totaloc) ELSE 0 END) ELSE 0 END AS 销售
    FROM B
    GROUP BY customername,ocname,[state];
      

  12.   

    select customername,sum(case ocname when N'结帐' then (case state when 1 then totaloc))
    from dbo.View_totaldata order by customername