Autor Zpráva
Sxmanek
Profil
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)
potom mám ještě přes WHERE odfiltrovaný hodnoty NULL.
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
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
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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: