Autor | Zpráva | ||
---|---|---|---|
Sxmanek Profil |
#1 · Zasláno: 11. 5. 2014, 18:27:36
Zdravím, řeším jednu situaci pomocí CASE.
Mám tabulku. ID-ID_Porucha-Datum A z této tabulky potřebuji dostat všechny ID, kterým do roku 1993 nebyla evidována ID_Porucha '13'. Mám CASE(WHEN (splněná podmínka) THEN NULL ELSE id END) Problém nastane, když se splní podmínka, ale je u stejného ID ještě jiná porucha, která tu podmínku nesplňuje. Takže se mi ve finále zobrazí, i když měla danou poruchu v daném datumu. Nejde nějak udělat, že když se splní ta podmínka, tak se dál dané ID neprochází a zobrazí se jako NULL?? SQL/Oracle |
||
abc Profil |
Já bych to zkusil nějak takto, ale nevím, zda jsem pochopil zadání:
SELECT * FROM tabulka WHERE datum > '1993-01-01' AND id NOT IN (SELECT DISTINCT(id) FROM tabulka WHERE id_porucha = 13) |
||
Sxmanek Profil |
To by asi šlo, jenže do dalšího sloupce počítám kolik měli ty ID co splnily tu podmínku celkem poruch, kde zas mám jinou podmínku na datum, takže by se to rušilo.
|
||
juriad Profil |
#4 · Zasláno: 11. 5. 2014, 19:04:46
Sxmanek:
Tak napiš přesné celé zadání, protože každá menší úloha může mít jednodušší řešení, které není možné použít na původní úlohu. |
||
Sxmanek Profil |
To je vše...
První sloupec(Zobrazit všechny ID, který měli ID_závadu do roku 1993) Druhý sloupec(Ke každému ID spočítat počet kolik měli celkem závad do konce roku 1993) Pak tam je jen místo jméno a seřadit podle jména sestupně a to vím jak udělat. |
||
abc Profil |
#6 · Zasláno: 11. 5. 2014, 19:43:25
„To je vše...“
To asi není vše, ještě v [#1] to měly být ti, kteří neměli poruchu 13. „První sloupec(Zobrazit všechny ID, který měli ID_závadu do roku 1993)“ Měli nebo neměli závadu ID? v [#1] to byli ti, kteří závadu neměli „Druhý sloupec(Ke každému ID spočítat počet kolik měli celkem závad do konce roku 1993)“ Jakých závad? Najednou do konce roku 1993? |
||
Sxmanek Profil |
abc:
„To asi není vše, ještě v [#1] to měly být ti, kteří neměli poruchu 13.“ Sry NEměli závadu do roku 1993. „Jakých závad? Najednou do konce roku 1993?“ A k těm ID co se mi zobrazí z té 1. podmínky, potřebuji spočítat, kolik mělo dané ID ID_závad do roku konce roku 93 př. tabulku co mám ID ID_Poruchy Datum 1 13 1990 1 1 1994 2 13 1995 3 5 1994 3 6 1993 výsledek by měl být toto: ID PocetPoruch 2 0 3 1 ID s číslem 1 není zobrazeno protože mělo do roku 1993 Poruchu '13'. |
||
abc Profil |
Možná to jde i lépe, ale funguje to:
SELECT s.id, (SELECT Count(*) FROM sxmanek s2 WHERE s2.id NOT IN (SELECT s1.id FROM sxmanek s1 WHERE s1.id_poruchy = 13 AND s1.rok < '1993') AND s2.rok < '1994' AND s2.id = s.id) AS POCET_DO_1994 FROM sxmanek s WHERE s.id NOT IN (SELECT s1.id FROM sxmanek s1 WHERE s1.id_poruchy = 13 AND s1.rok < '1993') GROUP BY s.id |
||
Časová prodleva: 10 let
|
0