Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapytanie z warunkami i grupowaniem
Forum PHP.pl > Forum > Bazy danych > MySQL
jerzy12
czy ktos moglby pomoc w stworzeniu zapytania
http://sqlfiddle.com/#!2/e380d/1

baza
  1. CREATE TABLE IF NOT EXISTS `test` (
  2. `id` int(10) UNSIGNED NOT NULL,
  3. `dzien` text COLLATE utf8_unicode_ci NOT NULL,
  4. `numer` int(11) NOT NULL,
  5. `wartosc` int(11) NOT NULL
  6. ) ENGINE=InnoDB;
  7.  
  8. INSERT INTO `test` (`id`, `dzien`, `numer`, `wartosc`) VALUES
  9. (1, 'poniedzialek', 0,5),
  10. (2, 'wtorek', 0,50),
  11. (3, 'wtorek', 1,4),
  12. (4, 'wtorek', 1,5),
  13. (4, 'wtorek', 2,5);


moje zapytanie
  1. SELECT `dzien`,
  2.  
  3. IF(`numer`=0,sum(`wartosc`),0) AS '0',
  4. IF(`numer`=1,sum(`wartosc`),0) AS '1',
  5. IF(`numer`=2,sum(`wartosc`),0) AS '2'
  6.  
  7. FROM `test`
  8. GROUP BY `dzien`


wynik powinien byc nastepujacy
dzien | 0 | 1 | 2
poniedzialek | 5 | 0 | 0
wtorek |50 | 9 | 5

problem w tym ze moje zapytanie zwraca co innego
jerzy12
link przydatny bo rozwiazal ten problem o ktorym pisalem wyzej

chcialbym natomiast pojsc jeszcze krok dalej i zrobic cos podobnego ale bardziej dynamicznie

przykladowa baza i rozwizanie pod linkiem
http://sqlfiddle.com/#!9/c6564/1

baza sql
  1. CREATE TABLE IF NOT EXISTS `test` (
  2. `id` int(10) UNSIGNED NOT NULL,
  3. `dzien` date,
  4. `imie` text COLLATE utf8_unicode_ci NOT NULL,
  5. `wartosc` int(11) NOT NULL
  6. ) ENGINE=InnoDB;
  7.  
  8. INSERT INTO `test` (`id`, `dzien`, `imie`, `wartosc`) VALUES
  9. (1, '2015-12-01', 'ewa',5),
  10. (2, '2015-12-02', 'monika',50),
  11. (3, '2015-12-02', 'ewa',4),
  12. (4, '2015-12-05', 'ewa',5);
  13.  
  14.  


zapytanie
  1. SELECT `imie`,DATE_FORMAT(`dzien`,'%Y-%m-%d') AS pierwsza_data,
  2. sum(IF(`dzien`='2015-12-01',`wartosc`,0)) AS '0',
  3. sum(IF(`dzien`='2015-12-02',`wartosc`,0)) AS '1',
  4. sum(IF(`dzien`='2015-12-03',`wartosc`,0)) AS '2',
  5. sum(IF(`dzien`='2015-12-04',`wartosc`,0)) AS '3',
  6. sum(IF(`dzien`='2015-12-05',`wartosc`,0)) AS '4'
  7.  
  8. FROM `test`
  9. GROUP BY `imie`


problem jest taki ze to nie do konca mi liczy jak powinno
chodzi o to ze wartosc w kolumnie "0" dla moniki powinna wynosic 50
a teraz ta wartosc jest w jedynce

problem jest w tym ze nazwa kolumny as 0, as 1 itd powinna byc tworzona dynamicznie

cos w ten sposob, tylko ze to nie dziala
  1. SELECT `imie`,DATE_FORMAT(`dzien`,'%Y-%m-%d') AS pierwsza_data,
  2. sum(IF(`dzien`='2015-12-01',`wartosc`,0)) AS ilosc_dni(`dzien` - pierwsza_data),
  3. sum(IF(`dzien`='2015-12-02',`wartosc`,0)) AS ilosc_dni(`dzien` - pierwsza_data),
  4. sum(IF(`dzien`='2015-12-03',`wartosc`,0)) AS ilosc_dni(`dzien` - pierwsza_data),
  5. sum(IF(`dzien`='2015-12-04',`wartosc`,0)) AS ilosc_dni(`dzien` - pierwsza_data),
  6. sum(IF(`dzien`='2015-12-05',`wartosc`,0)) AS ilosc_dni(`dzien` - pierwsza_data)
  7.  
  8. FROM `test`
  9. GROUP BY `imie`

czy jest jakas opcja zeby cos takiego zrobic?
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.