Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Funkcje agregujące
Forum PHP.pl > Forum > Przedszkole
Randallmaster
Witam mam przykładowo taką tabelę

ilosc status groupes opakowanie
2 P 2 1
3 P 1 2
4 U 2 3

SELECT sum(ilosc), groupes, status FROM `test` Where 1=1 group by groups

Dostaje:
ilosc status groupes opakowanie
6 P 2 1
3 P 1 2

Co mszę zrobić aby w otrzymać takie coś:

ilosc status groupes opakowanie
6 U 2 1
3 P 1 2

Czyli jeżeli istnieje status U aby go wyświetlić, natomiast opakowanie nie może się zmienić
Qwiatu
Nie wiem czy to jest to co chciałeś osiągnąć.


  1. WITH abc (ilosc,stat,groups,opakowanie)
  2. AS
  3. (
  4.  
  5. SELECT 2,'P',2,1
  6. UNION ALL
  7. SELECT 3,'P',1,2
  8. UNION ALL
  9. SELECT 4,'U',2,3
  10. )
  11.  
  12. SELECT ilosc,stat,groups,opakowanie INTO #tmp FROM abc Where 1=1
  13.  
  14. SELECT * FROM #tmp
  15.  
  16.  
  17.  
  18. SELECT *
  19. FROM
  20. (SELECT
  21. iloscok =(SELECT
  22. t1ilosc=sum(t1.ilosc)
  23. FROM #tmp t1
  24. WHERE t1.groups=intern.groups)
  25. ,statok = isnull((SELECT t2.stat
  26. FROM #tmp t2 where t2.groups=intern.groups
  27. GROUP BY t2.stat
  28. HAVING t2.stat = 'U'),intern.stat)
  29. --,intern.stat
  30. --,intern.opakowanie
  31. ,intern.groups
  32. ,opakok = (SELECT t3.opakowanie FROM #tmp t3 where t3.groups=intern.groups and t3.stat='P')
  33.  
  34. FROM #tmp as intern ) as zapytanie
  35. GROUP BY zapytanie.iloscok, zapytanie.statok, zapytanie.groups, zapytanie.opakok
  36.  
  37.  
  38.  
  39.  
  40.  
  41. GO
  42. DROP TABLE #tmp;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.