2010-06-11 12 views
8

Próbuję utworzyć kwerendę, która wykonuje sumę, jeśli określony parametr jest ustawiony na . Na przykład:Sprawdzanie sumy, czy pewne warunki są spełnione

SELECT SUM(IF(<condition>,field,field)) AS total_value 

... który działa poprawnie.

ale mam więcej niż jeden warunek w if(), jak:

SELECT SUM(IF(<condition> <condition>,field,field)) AS total_value 

..which nie działa, można mieć jakiś pomysł, co powinno być prawo dla tego zapytania.

Aktualizacja

Niestety dla złych pytań, prawo zapytania są

Mój obecny zapytanie wygląda mniej więcej tak: SELECT SUM (IF (condition1, pola, pola)) jako całkowita_wartość który pracuje prawidłowo.

ale mam więcej niż jeden warunek w if(), jak SELECT SUM (IF (condition1 warunek2, pola, pola)) jako całkowita_wartość który nie pracuje, można mieć jakiś pomysł, co powinno być prawo zapytania dla tego.

+0

Witamy Stackoverflow. Możesz edytować swoje pytanie (i odpowiedzi), klikając link edycji - jest po lewej stronie, naprzeciwko nazwy użytkownika i gravatar. Istnieje również składnia o nazwie MarkDown, która pozwoli Ci dostosować formatowanie, aby ułatwić czytanie. –

Odpowiedz

9

Spójrz na case:

Select Sum(Case When column = test Then column2 Else column3 End) 
... 

Jeśli masz wiele warunków, nadal można używać sprawy:

Select Sum(Case 
      When column1 = 'Foo' Then column2 
      When column1 = 'Bar' Then column3 
      When column1 = 'Gamma' Then column2 + column3 
      Else column3 End) 
From ... 

W tym scenariuszu, jeśli kolumna1 nie jest nieważna i nie równa się " Foo ", a następnie przejdzie do następnej instrukcji When. Jeśli ten test nie jest prawdziwy, przechodzi do następnego i tak dalej.

2
select sum(case when a = b and x = y then field1 + field2 else 0 end) 

Aktualizacja:

Może masz na myśli to:

select sum(case when a = b then field1 else field2 end) 
+0

+1: Myślę, że to jest to, co Gugu ma po –

+0

to nie działa – Gugu

+0

@Gugu: Czy możesz zaktualizować swoje pytanie, aby podać przykładowe dane i oczekiwane wyniki, aby było dla nas jasne, czego szukasz? –

0
SELECT SUM(IF(<condition1>, 
       IF(<condition2>, 
       <field1>, 
       <field2>), 
       <field2>)) AS total_value 
+0

nie działa, uzyskując takie same wyniki, jak w przypadku jednego warunku. – Gugu

+0

Powinieneś zaktualizować swoje oryginalne pytanie, aby dokładnie określić, czego szukasz. – VeeArr

1
SELECT SUM(IF(field = value1 OR field = value2 OR field = value3,1,NULL)) AS total_value 
Powiązane problemy