Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Pomoc s sql příkazem

Zdravím mám problém se sestavením sql příkazu...

příkaz:

select
   zamestnanci.jmeno,zamestnanci.oc,sum(platy.vyplata ) as Celkem,
   avg(select vyplata from platy where datum LIKE '%"+05+"') as prumer 
from platy inner join zamestnanci on platy.oc = zamestnanci.oc where platy.datum='0501' 
GROUP BY zamestnanci.oc,zamestnanci.jmeno

tato stať je špatná: avg(select vyplata from platy where datum LIKE '%"+05+"') as prumer
- Má vybrat ke každému uživateli průměrný výdělek pro daný rok

Děkuji za každou radu

aspoň trochu učesané přes CODE (touchwood)

Předmět Autor Datum
select z.jmeno ,z.oc ,sum(p.vyplata ) as Celkem ,avg(p.vyplata) as prumer from platy p inner join za…
wam_Spider007 14.01.2010 11:25
wam_Spider007
Jak jsi napsal tak to udělá průměr jenom v měsíci lednu a roku 05. Tím se mi ruší to, že udělám prům…
Robikon 14.01.2010 12:10
Robikon
dvě rozdílné podmínky musíš řešit dvěma subselecty. edit: Subselect
touchwood 14.01.2010 12:26
touchwood
a nejake data z tabuliek by sem neslo dat? co to je za divnu podmienku datum = "0105" a datum like '…
wam_Spider007 14.01.2010 13:09
wam_Spider007
to jsou podmínky, které pochopíš z popisu co jsem napsal 05 = rok 2005 0105 = leden 2005
Robikon 14.01.2010 13:13
Robikon
CREATE VIEW V_POCETZAM AS SELECT KOD, COUNT(*) AS POCET FROM ZAMESTNANCI GROUP BY KOD /*view, ktore… poslední
wam_Spider007 14.01.2010 14:34
wam_Spider007
select
 z.jmeno
,z.oc
,sum(p.vyplata ) as Celkem
,avg(p.vyplata) as prumer
from platy p
inner join zamestnanci z
	on p.oc = z.oc
where p.datum='0501' and p.datum LIKE '%"+05+"'
GROUP BY z.oc, z.jmeno

z popisu je to dost tazke urcit co mas v tabulkach, ake maju struktury a co chces dosiahnut. Tvoje query by tiez chcelo zoptimalizovat, lebo pisat to vsetko do riadku je neprehladne.
Nieco som napisal, ale neviem ci je to presne to co potrebujes.

ak to nie je to co hladas tak skus dat aj strukuru tabuliek a nejaky priklad dat, ktore tam mas a co z nich chces ziskat.

Jak jsi napsal tak to udělá průměr jenom v měsíci lednu a roku 05. Tím se mi ruší to, že udělám průměr za celý rok...

Mám dvě tabulky:

platy - id, datum, oc, hmrzda, vyplata
zamestnanci- id, kod, oc, jmeno, profese, datum, plat
utvar - id, kod, vedouci, plpocet

Příkazem potřebuji vybrat všechny útvary a k nim jméno vedoucí, oc vedoucího, počet zaměstnanců, celkem výplata pro zaměstnance v útvaru v zadaném měsici, průměr platu pro zadaný rok

tučné údaje jsou pro měsic where="0105" and p.datum Like '%"+05"'

PS: tím pádem příkaz co jsem poslal je celý špatně...

a nejake data z tabuliek by sem neslo dat?
co to je za divnu podmienku datum = "0105" a datum like '%"+05"'?
co znamena plpocet?

uz teraz ti ale viem povedat, ze si budes musiet spravit viacero view, ktore potom pospajas. Cisto len jednym selectom to nespravis.

CREATE VIEW V_POCETZAM
AS
SELECT KOD, COUNT(*) AS POCET
FROM ZAMESTNANCI
GROUP BY KOD
/*view, ktore vypluje pocet zamestnancov pre kazdy utvar*/


CREATE VIEW V_VYPLATASUM
AS
SELECT Z.KOD, P.DATUM, SUM(P.VYPLATA) AS VYPLATASUM
FROM ZAMESTNANCI Z
INNER JOIN PLATY P
	ON Z.OC = P.OC
GROUP BY Z.KOD, P.DATUM
/*view, ktore vypluje pre kazdy mesiac a kazdy utvar celkovu vyplatu zamestnancov ...preto beriem do uvahy cely datum, pretoze by sa ti mohlo stat, ze scitas rovnaky mesic z roznych rokov*/

CREATE VIEW V_VYPLATAAVG
AS
SELECT Z.KOD, SUBSTRING(P.DATUM, 3, 2) AS ROK, AVG(P.VYPLATA) AS VYPLATAAVG
FROM ZAMESTNANCI Z
INNER JOIN PLATY P
	ON Z.OC = P.OC
GROUP BY Z.KOD, SUBSTRING(P.DATUM, 3, 2)
/*view, ktore vypluje pre kazdy rok a kazdy utvar priemernu vyplatu*/

SELECT
 U.KOD
,U.VEDUCI
,PZ.POCET
,VS.VYPLATASUM
,VA.VYPLATAAVG
FROM UTVAR U

INNER JOIN V_POCETZAM PZ
	ON PZ.KOD = U.KOD

INNER JOIN V_VYPLATASUM VS
	ON VS.KOD = PZ.KOD

INNER JOIN V_VYPLATAAVG AV
	ON AV.KOD = PZ.KOD
WHERE VS.DATUM = '0105' AND AV.ROK = '05'
/*vysledne view, ktorym pospajas tie predosle predpripravene...*/

Zpět do poradny Odpovědět na původní otázku Nahoru