【问题标题】:SQL If "something" select countSQL 如果“某事”选择计数
【发布时间】:2011-01-12 20:01:13
【问题描述】:

来自我的自定义视图的输出如下...

Col1    Col2    Col3   Col4

xxxx    Cake    1      1*
Cake    xxxx    2*     1
xxxx    Cake    2      0*
xxxx    Cake    0      0*
Cake    xxxx    2*     0
Cake    xxxx    2*     0

我想总结的是……

For every row, 
if the word Cake is found in Col1, then add the value of Col3 to Sum
else add the value of Col4 to sum

从上面的视图得到的 SUM 应该是 1 + 2 + 0 + 0 + 2 + 2 = 7

提前致谢!

附言添加星号只是为了显示应将哪些数字添加到总和中。

【问题讨论】:

  • 我希望我在 SQL 职业生涯的早期就问过这个问题...
  • @Preet:“elseif”会建议您添加 Col3
  • @strakastroukas:公平地说,你的问题中没有什么可以告诉我们的,但是 elseif 使它明确。
  • 哎呀!那是一个错字的恶魔!我按要求更新了问题

标签: sql tsql select count sum


【解决方案1】:

类似的东西

select
   SUM( 
     Case 
         when Col1 = 'Cake' then Col3 
         when Col2 = 'Cake' then Col4 
         else 0 END 
   ) as MySum
from TheView

【讨论】:

    【解决方案2】:

    在 MySQL 中,你可以这样做

    SELECT SUM(IF(Col1 LIKE 'cake', Col3, Col4)) AS MySum
    

    我不确定其他变体的语法。顺便说一句,已经提供的答案

    SELECT
       SUM( 
         CASE 
             WHEN Col1 = 'Cake' THEN Col3 
             WHEN Col2 = 'Cake' THEN Col4 
             ELSE 0 END 
       ) AS MySum
    

    没有给出正确的结果 - 根据规范,当 'cake' 没有出现在 Col1 中时,应该添加 Col4,而不仅仅是出现在 Col2 中。

    【讨论】:

    • “类似...” :-)
    【解决方案3】:

    因此,根据 Franks 和 Duncan 的回答,您只需要以下内容...

    select SUM( Case 
                    when Col1 = 'Cake' then Col3 
                    else Col4 END ) as MySum
    from TheView
    

    【讨论】:

      【解决方案4】:
      create table #sample
      (
          Col1 varchar(50),
          Col2 varchar(50),
          Col3 int,
          Col4 int
      )
      
      insert into #sample VALUES ('xxxx', 'Cake', 1, 1);
      insert into #sample VALUES ('Cake', 'xxxx', 2, 1);
      insert into #sample VALUES ('xxxx', 'Cake', 2, 0);
      insert into #sample VALUES ('xxxx', 'Cake', 0, 0);
      insert into #sample VALUES ('Cake', 'xxxx', 2, 0);
      insert into #sample VALUES ('Cake', 'xxxx', 2, 0);
      
      
      select sum(case
                 when Col1 = 'Cake' then Col3
                 when Col2 = 'Cake' then Col4
                 else 0
             end) as [value]
      from  #sample
      

      【讨论】:

        【解决方案5】:

        在 Oracle 中,克雷格的答案会起作用,或者您可以使用如下解码:

        SELECT SUM(DECODE(Col1,'Cake',Col3,Col4)) FROM TheView;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-16
          • 2011-08-16
          • 1970-01-01
          • 2016-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-24
          相关资源
          最近更新 更多