Vnořeny select s group by
-
5. ledna 2011 10:37
Zdravím,
prosím o radu s níže uvedeným selectem.
Potřebuji v něm zobrazit několik polí s hodnotami SUM mozstvi_vyd za skupinu karty a to několik sloupců za -90 za -180 a za -360dní.
Dokážu to jen s jedním polem a při vnořeném selectu mi to nebere Group by a zobrazují se mi tak hodnoty za celé pole.
SELECT
dba.vl_polozky.ID_KARTY,
max(dba.vl_polozky.KARTA) AS KARTA,
max(dba.vl_polozky.NAZEV) AS NAZEV,
sum(dba.vl_polozky.MNOZSTVI_VYD) AS VYDEJ
FROM
dba.vl_zahlavi
INNER JOIN dba.vl_polozky ON (dba.vl_zahlavi.DOKLAD = dba.vl_polozky.DOKLAD)
WHERE
dba.vl_zahlavi.STORNO = 0 AND
dba.vl_zahlavi.TS >= (getdate() -90)
GROUP BY
dba.vl_polozky.ID_KARTY
Všechny reakce
-
5. ledna 2011 14:06
Jednou možností je třeba podmínka přímo v SUM:
SELECT p.ID_KARTY, max(p.KARTA) AS KARTA, max(p.NAZEV) AS NAZEV, sum(p.MNOZSTVI_VYD) AS VYDEJ360, sum(CASE WHEN z.TS >= (getdate() - 180) THEN p.MNOZSTVI_VYD ELSE 0 END) AS VYDEJ180, sum(CASE WHEN z.TS >= (getdate() - 90) THEN p.MNOZSTVI_VYD ELSE 0 END) AS VYDEJ90 FROM dba.vl_zahlavi z INNER JOIN dba.vl_polozky p ON (z.DOKLAD = p.DOKLAD) WHERE z.STORNO = 0 AND z.TS >= (getdate() -360) GROUP BY p.ID_KARTY
To samé lze udělat pro výpočet MAX.
- Označen jako odpověď dvfx 6. ledna 2011 11:00
-
6. ledna 2011 11:00
funguje
díky