Spojení dvou dotazů v sql v jeden – MS SQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Spojení dvou dotazů v sql v jeden – MS SQL – Fórum – Programujte.comSpojení dvou dotazů v sql v jeden – MS SQL – Fórum – Programujte.com

 

Jataky
~ Anonymní uživatel
4 příspěvky
9. 2. 2020   #1
-
0
-

Zdravím,

jak spojit dva dotazy do jednoho

A: SELECT id_filtr, sum(kusy) from zmeny_filtry where nakup_vymena="N" group by id_filtr

B: SELECT id_filtr, sum(kusy) from zmeny_filtry where nakup_vymena="V" group by id_filtr

tak, aby vyšlo SELECT id_filtr, sum(A) - sum(B) from zmeny_filtry group by id_filtr

Děkuji

Nahlásit jako SPAM
IP: 81.200.56.–
MilanL+1
Grafoman
10. 2. 2020   #2
-
0
-

#1 Jataky
ty 2 dotazy musíš dát jako sub selecty a nad nimi udělat slučovací, hodím ti základ, jen pak možná bude potřeba ošetřit některé stavy.

SELECT id_filtr, COALESCE(A.suma,0)-COALESCE(B.suma,0) as rozdil
FROM zmeny_filtry S
WHERE nakup_vymena="N" or nakup_vymena="N"

LEFT JOIN
(SELECT id_filtr, sum(kusy) as suma FROM zmeny_filtry 
WHERE nakup_vymena="N" group by id_filtr) A 
ON S.id_filtry=A.id_filtry

LEFT JOIN
(SELECT id_filtr, sum(kusy) as suma FROM zmeny_filtry 
WHERE nakup_vymena="V " group by id_filtr) B 
ON S.id_filtry=B.id_filtry

COALESCE(A.suma,0)-COALESCE(B.suma,0) as rozdíl

coalesce udělá to, že pokud v A nebo B subselectu nebude hodnota pro dané ID, tak místo NULL použije hodnotu 0

Nahlásit jako SPAM
IP: 91.139.9.–
Jataky
~ Anonymní uživatel
4 příspěvky
18. 2. 2020   #3
-
0
-

#2 MilanL
Díky za radu, nerozjel jsem to podle tvé rady. Nakonec vyřešeno takto:

SELECT id_filtr as filtr,
(SELECT sum(kusy) FROM zmeny_filtry where id_filtr = filtr and nakup_vymena = 'N') - (SELECT sum(kusy) FROM zmeny_filtry where id_filtr = filtr and nakup_vymena = 'V') as vypocet FROM zmeny_filtry
group by id_filtr
Nahlásit jako SPAM
IP: 81.200.53.–
MilanL+1
Grafoman
18. 2. 2020   #4
-
0
-

#3 Jataky
hm teď jsem na to koukal mám tam u zpárování v ON navíc 1 písmenko místo .id_filtr jsem tam psal id_filtry, jinak by to fungovat mělo

jinak je to totéž co to tvoje, navíc mám ošetřené stavy, kdy u některé položky jeden z typů nakup_vymena N V chybí.

a ještě ten 3. řádek s WHERE by měl být jako poslední, dělal jsem to na rychlo bez možnosti vyzkoušení.

Nahlásit jako SPAM
IP: 91.139.9.–
Jataky
~ Anonymní uživatel
4 příspěvky
18. 2. 2020   #5
-
0
-

#3 Jataky
... bohužel tvůj dotaz nefunguje, a nemůžu najít , kde máš chybu :(

Nahlásit jako SPAM
IP: 81.200.56.–
MilanL+1
Grafoman
18. 2. 2020   #6
-
0
-

#5 Jataky
hele ten tvůj dotaz dělá ještě jednu blbost, za každej záznam V N k jednomu ID to vyhodí ten výpočet na více řádek, bylo by lepší tu hlavní část provázat na tabulku produktů např "filtry" jsem to testoval u sebe na mySQL

SELECT S.ID, S.název , A.suma as N, B.suma as V,
 COALESCE(A.suma,0)-COALESCE(B.suma,0) as rozdil
FROM filtry S

LEFT JOIN
(SELECT id_filtr, sum(kusy) as suma FROM zmeny_filtry 
WHERE nakup_vymena="N" group by id_filtr) A 
ON S.ID=A.id_filtr

LEFT JOIN
(SELECT id_filtr, sum(kusy) as suma FROM zmeny_filtry 
WHERE nakup_vymena="V " group by id_filtr) B 
ON S.ID=B.id_filtr

výsledek

ID název N V rozdil 1 první 15 5 10 2 druhý 10 NULL 10 3 třetí 5 10 -5

data ve filtry změny

id_filtr kusy nakup_vymena  1 10 N  1 5 V  2 10 N  1 5 N  3 5 N  3 10 V

podmínka na konci by mohla být

WHERE A.suma<>0 or B.suma<>0

Nahlásit jako SPAM
IP: 185.112.167.–
Jataky
~ Anonymní uživatel
4 příspěvky
19. 2. 2020   #7
-
0
-

Děkuji za radu a ochotu, ale jak jsem už výše psal, vyřešeno takto a je to funkční.   

SELECT id_filtr as filtr,
(SELECT sum(kusy) FROM zmeny_filtry where id_filtr = filtr and nakup_vymena = 'N') - (SELECT sum(kusy) FROM zmeny_filtry where id_filtr = filtr and nakup_vymena = 'V') as vypocet FROM zmeny_filtry
group by id_filtr
Nahlásit jako SPAM
IP: 81.200.53.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý