
MSSQL select
Uz som zistil ze su tu chytrejsi ako, tak ak by niekto z nich mal cas . . . .
mam zamestnancov, kazdy ma jedinecne ID, a kazdy moze mat priradeny v jeden den jeden kod z 1,2,3,4,5,6 . . .
Na konci mesiaca kazdemu na zaklade kodu spravim nejaky prepocet.
Ale pre technicke problemy moze mat uz zadany jeden zamestnanec na jeden den aj dva spolu suvisiace pevne zadane kody, napr 1,10; 2,34; 3,33.
Takto by som mu to spocital vlastne dvakrat, ked tam ma dva kody.
Potrebujem u tych, ktory maju dvojicu kodov, aby sa bral do uvahy len druhy.
Napriklad
id kod
a 1
b 2
c 1
c 10
takze zamestnaci s id 'a' a 'b' ok, ale u zamestnanca 'c' potrebujem vylucit riadok id 'c' a kod 1, lebo potrebujem unho pracovat len s riadkom s kodom 10
Da sa to v jednom selecte nejako vybrat?
Nemozem vyhodit kod 1 , lebo to by som vyhodil aj zamestnnaca 'a'
ked som to mal po jednom , tak mi to pekne spocitalo takto
select id,mesiac,sum(hodiny) from casy where (kod=1 or kod=2 or kod = 10) group by id ....
Nemozem to ani odpocitavat napr ze spocitam samostatne 1 a 10 a navzajom odpocitam, lebo v 1 a 10 mozu byt rozne hodnoty
Estli dobře rozumím popisu,tak problém není s návrhem databáze ani vkládání hodnot,ale s získáváním dat a nějakým výpočtem skóre. A dilema je , jak udělat bussines logiku, jestli to počítat rovnou v databázi (hodí se, pokud tohle je jenom část problému, následuje další zpracování, řazení, filtrování...) nebo získat z databáze čistá data a tu logiku udělat v neznámém programovacím jazyce(python?)?
Jako ono by šlo tu logiku narvat do sql dotazu, . napadá mě COALESCE(kod1,kod2) (ne idiotské case switch, i to existuje v sql) ... Ale jsou oba kódy rovnocenné z hlediska dalšího zpracování? A nebo pokud to chceš vyšperkovat, můžeš si přidat sloupec kod_switch a potom použít ten switch kod_switch kde vybereš který sloupec to má vrátit. Může se to hodit, když bude potřeba právě mít uložené obě kody, ale volit si zaměřovačem, jaký kod u každého id
Koukám, že si dal ukázku, kde máš 2x c ,jednou s kódem 1(2), potom s kódem 2(10). To je jedna možnost.Druhá možnost je mít právě strukturu {id,kod1,kod2}. Jsou situace, kdy jedno řešení může být lepší,ale volil bych dva sloupce, už jen ,že můžeš definovat kod1=datový typ enum(1,2,három,3), 2=enum(10,20,ps,wtf), ale pak zase budeš mít v resultu (select id,kod_mix) smíchaný typy něco jako enum1 +enum2, což ani nevím jestli jde, prrávě proto možná místo enum použít string
ale třeba je to vymyšlené, že vše běží v SQL? potom první dilema je jasné
tabulka, stlpce a struktura dat je jasna . . .
potrebujem z toho dostat ciste data, jeden prikaz select, max mozno viac cez union, nemozem ulozit ani proceduru . . .
ako dostat pre osoby sucet hodnot pre prislusnu skupinu kodov
resp ako spocitat v tej sume len vyssi kod, ak sa tam nachadza aj s nizsim kodom, ale tie dvojice su pevne dane
napr skupina kodov 1,2,3,4, pricom napr je pevne dana dvojica 3 a 4
osoba moze mat na kazdy den 1 alebo 2 kody, povedzme postupne dni prvy den 1 dalsi 3, dalsi 2, dalsi 1, ....1,1,2,2,1,2,1,3, . . . ale moze mat aj v jeden den zadane 3 a 4 - to je ta pevna dvojica, ked je 4 musi byt aj 3, alebo len 3 samoztatne . . . . a ked sa vyskytne takato dvojica, ako zapocitat do sumy len ten vyssi kod (4, hodnotu pre kod 3 ignorovat), teda hodnotu ktoru reprezentuje v dalsom stlpci suma
Vzdyt uz jsem ti odpovedel. Vybrat id, den a vyssi kod umis.
Tak tento vyber pouzij a napoj to na data a vysouctuj si, co potrebujes. Inspirace prvni odpoved, prvni moznost.