Autor Zpráva
Maii
Profil *
Zdravím, potřebuji poradit, nakopnout či jinak pomoc jak vyřešit tento problém.

Mám tabulku v MSSQL. Obsahuje sloupce číslo zaměstnance, délku pracovní činnosti, "středisko" (označení pro identifikaci produktu a s ním spojené činnosti), pracovní činnost a koeficient pro výpočet poměru pracovní doby, pokud vykonává souběžně dvě činnosti (je to řešeno přihlášením ID kartou

PracID Cas Stredisko Cinnosti Pocet Mesic Rok
989 3,43 EI98T Vážná 2
734 12,54 TD659 Plnička 2
734 2,1 TD659 Předák 1

Pracovník 989 praacoval na produktu EI 98T jako vážný. Protože byl však přihlášen dvakrát, tak nepracoval 3,43 hodiny, ale CAS/Pocet, tedy 3,43/2 hodin.

Údaje jsou vždy za kalendářní měsíc.

Já potřebuji tyto údaje "vyrubat" a vložit do tabulky excelu, s tím, že bude možné si zvolit měsíc a rok a výsledek se pak exportuje do csv a vloží do mzdového programu.

Ta tabulka má vypdat takto

Zaměstnanec Celkový_čas
989 1,715 <Postup výpočtu:(3,43/2)>
734 8,77 <Postup výpočtu:[(12,54/2)+2,1]>

Využívám MS Query, který zajistí že je možné použít parametr v dotazu, což je odkaz na buňku v listu excelu. Samotný dotaz pak vypadá takto:

SELECT PracID AS 'Zaměstnanec', Round(SUM(Cas/Pocet),2) AS 'Celkový_cas' FROM <databáze> where (Mesic=?<1. parametr z buňky>) AND (Rok=? <2.parametr z buňky>)
GROUP BY PracID, Pocet
Order By PracID

Problémem samozřejmě je, že data jsou "grupována" nejen podle ID pracovníka, ale i podle poctu přihlášení což mi samozřejmě udělá pro některé pracovníky dva řádky.

Teoretické řešení je vytvoření dočasné tabulky, ve které dojde k výpočtu a poté se tato dočasná tabulka pomocí agregační funkce sečte. podle PracID.

Možná řešení, která mě napadla jsou pohledy, nebo vnořené selecty. Bohužel ani jeden nesplňuje podmínku pro vkládání parametru where odkazem na buňku listu.

Ideální řešení by samozřejmě byl takovýto dotaz

SELECT PracID AS 'Zaměstnanec', Round(SUM(Cas/Pocet),2) AS 'Celkový_cas' FROM <databáze> where (Mesic=?<1. parametr z buňky>) AND (Rok=? <2.parametr z buňky>)
GROUP BY PracID
Order By PracID

ale zde samozřejmě hodí databáze chybu.

Proto se ptám, zda někdo má tušení jak to vyřešit.

Ještě dodám, že není možnost úpravy v "hlavní tabulce" a ten výpočet lze řešit až po ukončení měsíce (je nutné to takto mít) protože je vkládáno na základě přihlášení ID kartou k výrobní lince.
Kajman
Profil
Maii:
ale zde samozřejmě hodí databáze chybu.

Jakou? Groupování jen podle PracID by jít mělo.
Maii
Profil *
Kajman:
"Klasika"

Kolumn ... .Pocet is invalid in the select list becouse it is not contained in either an aggregate function or the group by clause.


Je to samozžejmě trochu divný, protože na čas nekřičí

jinak kompletní úplný dotaz je zde:

SELECT RTRIM(SUBSTRING("_OV_Data03".xPracovnikOC,PATINDEX('%[1,2,3,4,5,6,7,8,9]%',"_OV_Data03".xPracovnikOC),4)) AS 'Osobní číslo', "_OV_Data03".xStredisko AS 'Středisko', Round(Sum("_OV_Data03".vCasHod/"_OV_Data03".xPocet),2) AS 'Čas', "_OV_Data03".xPozice, "_OV_Data03".xPocet
FROM K2CA_CA.dbo."_OV_Data03" "_OV_Data03"
WHERE ("_OV_Data03".xMesic=?) AND ("_OV_Data03".xRok=?)
GROUP BY RTRIM(SUBSTRING("_OV_Data03".xPracovnikOC,PATINDEX('%[1,2,3,4,5,6,7,8,9]%',"_OV_Data03".xPracovnikOC),4)), "_OV_Data03".xStredisko, "_OV_Data03".xPozice, "_OV_Data03".xPocet
HAVING ("_OV_Data03".xPozice Not In ('Seřízení','Servis','Příprava'))
ORDER BY LEN(RTRIM(SUBSTRING("_OV_Data03".xPracovnikOC,PATINDEX('%[1,2,3,4,5,6,7,8,9]%',"_OV_Data03".xPracovnikOC),4))), RTRIM(SUBSTRING("_OV_Data03".xPracovnikOC,PATINDEX('%[1,2,3,4,5,6,7,8,9]%',"_OV_Data03".xPracovnikOC),4))


Všechno zpět všechno špatně :(.

Půjdu k očnímu, jsem slepej jak patrona. Samozřejmě že to hází chybu. Já ho totiž mám v Selectu. Jak jsem to teď viděl, tak mi to došlo. To bude asi nedostatkem alkoholu (viz prohibice).

Moc se omlouvám děkuji za Váš čas a prosím adminy o smazání ať se to neplete.

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: