Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sumowanie wartości dla dwóch różnych warunków
lucasville
post 11.05.2013, 22:32:34
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.12.2010

Ostrzeżenie: (0%)
-----


Cześć.
Chciałbym otrzymać w kolumnach 5 różnych sum wartości z czego 4 mają te same kryterium a piąte ma inne. Chciałbym to zrobić w jednej kwerendzie.
Powiedzmy, że mam tabelę o nazwie sprawa, która wygląda mniej więcej tak:

  1. Id War1 War2 D1 D2 D3 D4 D5
  2. 1 1 5 100 50 30 20 10
  3. 2 1 6 0 0 0 20 0
  4. 3 2 6 10 100 20 0 0
  5. 4 3 4 50 40 20 30 20
  6. 5 1 5 20 30 40 50 10
  7. 6 2 6 100 40 100 50 100
  8. 7 3 5 40 30 20 10 0
  9. 8 3 4 0 10 20 30 40
  10. 9 1 5 50 100 40 10 40



I chciałbym otrzymać tabelę, gdzie będzie pięć kolumn po dwa wiersze (nagłówek + suma). Pierwsze cztery kolumny robię zapytaniem:
  1. SELECT sum(D1) AS Suma1,sum(D2) AS Suma2,sum(D3) AS Suma3,sum(D4) AS Suma4
  2. FROM sprawa
  3. WHERE War1=3;


Piątą kolumnę robię zapytaniem:
  1. SELECT sum(D5) AS Suma5
  2. FROM sprawa
  3. WHERE War1=3 AND War2=4;


Jak mogę połączyć te dwa zapytania w jedną tabelę?
Efekt końcowy mniej więcej taki chciałbym uzyskać:
  1. Suma1 Suma2 Suma3 Suma4 Suma5
  2. 90 80 60 70 60


Ten post edytował lucasville 11.05.2013, 22:38:28
Go to the top of the page
+Quote Post
mmmmmmm
post 12.05.2013, 11:03:59
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


  1. SELECT sum(D1) AS Suma1,sum(D2) AS Suma2,sum(D3) AS Suma3,sum(D4) AS Suma4, Sum(IIf(War2=4,D5,NULL)) Suma5
  2. FROM sprawa
  3. WHERE War1=3;
Go to the top of the page
+Quote Post
lucasville
post 12.05.2013, 14:01:31
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.12.2010

Ostrzeżenie: (0%)
-----


Działa idealnie. Tak jak chciałem.
Udało mi się wczoraj to zrobić za pomocą funkcji UNION: jedno zapytanie ze wspólnym war1 połączyłem z drugim zapytaniem, gdzie dodatkowo jest war2, tyle, że musiałem dodać "puste" kolumny, aby UNION zadziało, a w dodatku kiepsko to wyglądało.

Twoje rozwiązanie jest zdecydowanie tym o co mi chodziło.

Zapytam przy okazji: powiedzmy, że dochodzą jeszcze dwie kolumny z war3 i war4 by rozbudować kryteria zapytania. Czy najłatwiej będzie to zrobić analogicznie jak w Twoim przykładzie?
Już pokazuję o co chodzi, dla przykładu:
  1. SELECT sum(D1) AS Suma1,sum(D2) AS Suma2,sum(D3) AS Suma3,sum(D4) AS Suma4, Sum(IIf(War2=4 AND War3 IN ('4','6','7'),D5,NULL)) Suma5
  2. FROM sprawa
  3. WHERE War1=3 AND War4=5


Ten post edytował lucasville 12.05.2013, 14:03:49
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 01:58