Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Pár SQL dotazů - pomozte prosím

Zdravím,
mám tento model databáze:
[http://img220.imageshack.us/img220/144/clipboard01a l4.png]

Zadaní příkladů je:

Příklad č. 3
Vypište si data z tabulky období. Na základě struktury těchto údajů vytvořte dotaz, který zobrazí sumy zaplacených záloh dle jednotlivých období odečtů.

Nato jsem vymyslel toto:

select obdobi_n, sum(castka) from klient,obdobi,meridlo,odecty,zalohy
where klient.id_klienta = zalohy.id_klienta and odecty.ID_OBD = obdobi.ID_OBD and klient.id_klienta = meridlo.id_klienta
and meridlo.ozn_meridla = odecty.ozn_meridla
group by obdobi_n 

Vrací toto:
[http://img80.imageshack.us/img80/1115/vysledekre2.p ng]
Což si myslím, že je blbost vzhledem k datům, která jsou v tabulce záloh (viz. níže)

S dalšími dvěmi si vůbec nevím rady...:-/

Příklad č. 4,.
Vypiš zákazníky, kteří měli odběr energie za období 01/2004 – 01/2005 vetší než průměrný.

Příklad č. 5
Vyúčtuj všechny klienty za období plateb 01/2004 – 01/2005. Zjisti jejich nedoplatky nebo naopak přeplatky

Ještě přikladám jak vypadá tabulka obdobi a tabulka záloh:
[http://img223.imageshack.us/img223/3829/obdobiia6.p ng][http://img215.imageshack.us/img215/575/zalohyag0.pn g]

Databáze je Oracle. Pomůže někdo?
Díky!:beer:
MaSo

Předmět Autor Datum
Nikdo neví? :.( nový
MaSo 29.04.2007 00:30
MaSo
4: select id_klienta, castka from klient join meridlo using(id_klienta) join odecty using(ozn_meridl… nový
Adam T 29.04.2007 01:13
Adam T
sorry, musim scrollovat, tak jsem to trochu pokonil (misto castky rozdil odberu), ale myslim, zes me… nový
Adam T 29.04.2007 01:15
Adam T
jinak kdybys sem hodil vytvorenou a naplnenou db slo by to(aspon me lip) - nebo mi dal pristup do db… nový
Adam T 29.04.2007 01:16
Adam T
Jj! Použil bych některého SQL buildera a měl to coby dup :-). nový
Rce 29.04.2007 01:22
Rce
Příklad 4, bez záruky :-| neboť nemám možnost to zkusit (tabulky se mi nechce dělat): select K.Naze… nový
Rce 29.04.2007 01:19
Rce
Děkuji za odpovědi, ale obojí mi hází chyby. Můžete se zkusit připojit, ale mam jenom Oracle Express… nový
MaSo 29.04.2007 01:34
MaSo
Unable to complete network request to host "217.195.171.43". Failed to establish a connection. Nemoh… nový
Rce 29.04.2007 01:52
Rce
Zkus to pls ještě jednou...upravil jsem nastavení... nebo vlastně rovnou přes web: http://217.195.17… nový
MaSo 29.04.2007 02:01
MaSo
SELECT DOTAZ2.KLIENT, DOTAZ2.ODBER, DOTAZ1.PRUMER FROM (select KLIENT.NAZEV_KL as KLIENT, SUM(ODECTY… nový
Příklad 4 - dotaz 29.04.2007 04:02
Příklad 4 - dotaz
Díky moc! :beer: nový
MaSo 29.04.2007 10:58
MaSo
Neni zac. Priklad c. 5 je podobny (musis udelat par vnorenych dotazu). Jednotlivymi dotazy potrebuje… nový
wrtrcz 29.04.2007 11:17
wrtrcz
Ok, zkusím to sám. Struktura je zadaná školou...:-) nový
MaSo 29.04.2007 11:19
MaSo
Tak ve skole vyridid, ze jenom prase narve do jednoho textovyho pole dve DATE polozky :) nový
wrtrcz 29.04.2007 11:20
wrtrcz
Ok, ale až po zkoušce. :-) poslední
MaSo 29.04.2007 11:30
MaSo

Příklad 4, bez záruky :-| neboť nemám možnost to zkusit (tabulky se mi nechce dělat):

select K.Nazev_Kl, K.Misto, K.Ulice, K.Cislo, K.PSC, (Od.kon_stav - Od.poc_stav) as Odber, Ob.obdobi_n
from Klient K inner join Meridlo M on K.id_klienta = M.id_Klienta
              inner join Odecty Od on M.ozn_meridla = Od.ozn_meridla
              inner join Obdobi Ob on Od.id_obd = Ob.id_obd
where (Ob.obdobi_n = "01/2004-01/2005") and (Od.kon_stav - Od.poc_stav) > 
                               (select avg (O.kon_stav - O.poc_stav) 
                                from   Odecty O inner join Obdobi B O.id_obd = B.id_obd 
                                where (B.obdobi_n = "01/2004-01/2005"))

Ufff! Nejsem si bez spuštění jist, jestli druhá část podmínky WHERE hlavního Selectu (od AND dále) nemá být v HAVING).

Unable to complete network request to host "217.195.171.43".
Failed to establish a connection.
Nemohlo být vytvořeno žádné připojení, protože cílový počítač je aktivně odmítl.

Ale možná mám na to blbého klienta, i když tvrdějí, že oracla to zvládne :-(

SELECT DOTAZ2.KLIENT, DOTAZ2.ODBER, DOTAZ1.PRUMER
FROM
(select	 KLIENT.NAZEV_KL as KLIENT,
         SUM(ODECTY.KON_STAV-ODECTY.POC_STAV) as ODBER
   from	 ODECTY, MERIDLO, KLIENT
  where  MERIDLO.ID_KLIENTA =KLIENT.ID_KLIENTA 
    and	 MERIDLO.OZN_MERIDLA =ODECTY.OZN_MERIDLA
   and ODECTY.ID_OBD = 1
   group by KLIENT.NAZEV_KL) DOTAZ2,
(select	 avg(ODECTY.KON_STAV-ODECTY.POC_STAV) as PRUMER 
   from	 ODECTY  WHERE ID_OBD = 1) DOTAZ1
where DOTAZ2.ODBER > DOTAZ1.PRUMER

Neni zac. Priklad c. 5 je podobny (musis udelat par vnorenych dotazu). Jednotlivymi dotazy potrebujes zjistit

1) ID klienta a kolik zaplatil v roce 2005
2) ID klienta (plus dalsi udaje ktere chces videt), cenu_kwh klienta [nasobit] kolik odebral v zadanem obdobi
3) sloucenim obou dostazu ziskas udaje klienta a udaje o preplatcich/nedoplatcich (to bude ta nasobena cena [minus]kolik zaplatil v roce 2005)

Princip je stejny, jako v predchozim pripade, jenom se pouziji jine tabulky. Kdyz to nezvladnes, tak se na to pak jeste podivam.

Btw ta struktura je tvoje nebo zadana (skolou?)? Je to misty malinko prasarna - typicky ta obdobi :)

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