SQL Если "что-то" выберите количество - PullRequest
1 голос
/ 04 февраля 2010

Вывод из моего пользовательского представления выглядит следующим образом ...

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

Сумма, полученная из приведенного выше представления, должна составлять 1 + 2 + 0 + 0 + 2 + 2 = 7

Заранее спасибо!

p.s. Звездочки добавляются только для того, чтобы показать, какие цифры следует добавить к сумме.

Ответы [ 5 ]

12 голосов
/ 04 февраля 2010

Что-то вроде

select
   SUM( 
     Case 
         when Col1 = 'Cake' then Col3 
         when Col2 = 'Cake' then Col4 
         else 0 END 
   ) as MySum
from TheView
1 голос
/ 04 февраля 2010

Итак, основываясь на ответах Фрэнкса и Дункана, все, что вам нужно, должно быть следующее ...

select SUM( Case 
                when Col1 = 'Cake' then Col3 
                else Col4 END ) as MySum
from TheView
1 голос
/ 04 февраля 2010

В 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

не дает правильных результатов - в соответствии со спецификацией, Col4 следует добавлять, когда «торт» не появляется в Col1, а не только если он появляется в Col2.

0 голосов
/ 04 февраля 2010

В ответ Oracle Craig будет работать, или вы можете использовать декодирование, как показано ниже:

SELECT SUM(DECODE(Col1,'Cake',Col3,Col4)) FROM TheView;
0 голосов
/ 04 февраля 2010
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...