2010-02-03 17 views
1

La sortie qui vient d'une vue personnalisée est à moi est comme suit ...SQL Si « quelque chose » select count

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 

et ce que je voudrais résumer est ...

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 

Le SUM résultant de la vue ci-dessus, devrait être 1 + 2 + 0 + 0 + 2 + 2 = 7

Merci d'avance!

p.s. Les astérisques sont ajoutés juste pour montrer quels nombres doivent être ajoutés à la somme.

+1

Et si dans les deux? Ajouter les deux? –

+0

Je voudrais avoir posé cette question au début de ma carrière SQL ... –

+0

@Preet: le "elseif" suggérerait que vous venez d'ajouter Col3 – Draemon

Répondre

12

Quelque chose le long des lignes de

select 
    SUM( 
    Case 
     when Col1 = 'Cake' then Col3 
     when Col2 = 'Cake' then Col4 
     else 0 END 
    ) as MySum 
from TheView 
0
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 
1

MySQL, vous pouvez juste faire

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

Je ne suis pas sûr de la syntaxe des autres variantes. Soit dit en passant, ne donne pas les résultats attendus déjà la réponse fournie de

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

- selon la spécification, Col4 doit être ajouté lorsque « gâteau » ne figure pas dans Col1, non seulement si elle apparaît dans Col2.

+0

"Quelque chose dans le genre de ..." :-) –

+0

@Frank: Je n'ai jamais dit que la spécification était correcte;) – Duncan

1

donc basée sur les réponses de Franks et Duncan les éléments suivants devraient être tout ce que vous avez besoin ...

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

Dans la réponse d'Oracle Craig fonctionnera ou vous pouvez utiliser un decode comme ce qui suit:

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