select @a = case when kind = 'A' then ISNULL(sum(price),0)
       @b = case when kind = 'B' then ISNULL(sum(price),0)
       @c = case when kind = 'C' then ISNULL(sum(price),0)
       @d = case when kind = 'D' then ISNULL(sum(price),0)
from pos

解决方案 »

  1.   

    -- 不好意思,上面有错select @a = case when kind = 'A' then ISNULL(sum(price),0) end
           @b = case when kind = 'B' then ISNULL(sum(price),0) end
           @c = case when kind = 'C' then ISNULL(sum(price),0) end
           @d = case when kind = 'D' then ISNULL(sum(price),0) end
    from pos
      

  2.   

    select @a=sum(case kind when 'A' then 1 else 0 end)
          ,@b=sum(case kind when 'B' then 1 else 0 end)
          ,@c=sum(case kind when 'C' then 1 else 0 end)
          ,@d=sum(case kind when 'D' then 1 else 0 end)
    from pos
      

  3.   


    select kind,ISNULL(sum(price),0)
    from pos
    group by kind
      

  4.   

    select @a = (case when kind = 'A' then ISNULL(sum(price) end)
           @b = (case when kind = 'B' then ISNULL(sum(price) end)
           @c = (case when kind = 'C' then ISNULL(sum(price) end)
           @d = (case when kind = 'D' then ISNULL(sum(price) end)
    from pos
      

  5.   

    -- 不好意思,我的上面也有错  呵呵
    select @a=isnull(sum(case kind when 'A' then price else 0 end),0)
          ,@b=isnull(sum(case kind when 'B' then price else 0 end),0)
          ,@c=isnull(sum(case kind when 'C' then price else 0 end),0)
          ,@d=isnull(sum(case kind when 'D' then price else 0 end),0)
    from pos
      

  6.   

    create Table #a(aa CHAR(1),bb DECIMAL(12,2))declare @i INT
    set @i =65
    WHILE @i<=90
    begin
      insert into #a
      SELECT CHAR(@i),ISNULL(sum(price),0) from pos where kind =CHAR(@i) 
      
      set @i=@i+1
    endselect * from #adrop table #a 这样建了一个临时表,就会把Kind从A到Z的分组汇总price值保存到临时表
      

  7.   

    select @a=isnull(sum(case kind when 'A' then price else 0 end),0)
          ,@b=isnull(sum(case kind when 'B' then price else 0 end),0)
          ,@c=isnull(sum(case kind when 'C' then price else 0 end),0)
          ,@d=isnull(sum(case kind when 'D' then price else 0 end),0)
    from posisnull 不写的话,@a……会变成null的可能。
      

  8.   

    谢谢 meilian01(meilian) 和 lsxaa(小李铅笔刀) yujohny(踏网无痕) ( ,我来试试。请问yujohny(踏网无痕) 你这样写效率会高吗? 假设从A 一直到G
    pos数据量在30万条。
      

  9.   

    這樣﹐效率是最高的寫成一句﹕
    select @a=case kind when 'A' then ISNULL(sum(price),0) else 0 end,@b=case kind when 'B' then ISNULL(sum(price),0) else 0 end,@c=case kind when 'C' then ISNULL(sum(price),0) else 0 end,@d=case kind when 'D' then ISNULL(sum(price),0) else 0 end from pos
      

  10.   

    to  rockyljt(Rocky) 
    谢谢你,但是你这样写法通不过阿,提示没有group by什么地
      

  11.   

    huangxinru(键盘手) 的好象可以