|
[ borcha @ 22.07.2007. 11:36 ] @
| E, ovako...
evo koda pa da vidimo gde gresim...
Code: @IDSko bigint,
@IDSkoGod int,
@IDUce bigint,
@PocSkoGod datetime,
@ZavPrvPoGo datetime
as
SELECT SUM(dbo.tIzostanci.BroCasIzo) AS BrIzo, dbo.tIzostanci.ID_Ucenik, dbo.tPodUce.ID_Ucenik AS Expr1, dbo.tIzostanci.ID_SkoGod,
dbo.tIzostanci.ID_Skola, dbo.tPodUce.Ime, dbo.tPodUce.Prezime, dbo.tSkoGod.ID_SkoGod AS Expr2, dbo.tSkoGod.PocSkoGod,
dbo.tSkoGod.KrajPrvogPG, dbo.tIzostanci.DatIzo
FROM dbo.tPodUce INNER JOIN
dbo.tIzostanci ON dbo.tPodUce.ID_Ucenik = dbo.tIzostanci.ID_Ucenik INNER JOIN
dbo.tSkoGod ON dbo.tIzostanci.ID_SkoGod = dbo.tSkoGod.ID_SkoGod
GROUP BY dbo.tIzostanci.DatIzo, dbo.tIzostanci.ID_Ucenik, dbo.tPodUce.ID_Ucenik,
dbo.tIzostanci.ID_SkoGod, dbo.tIzostanci.ID_Skola, dbo.tPodUce.Ime,
dbo.tPodUce.Prezime, dbo.tSkoGod.ID_SkoGod, dbo.tSkoGod.PocSkoGod,
dbo.tSkoGod.KrajPrvogPG
HAVING (dbo.tIzostanci.ID_Skola = @IDSko) AND (dbo.tPodUce.ID_Ucenik =@IDUce) AND
(dbo.tSkoGod.ID_SkoGod = @IDSkoGod) AND (dbo.tIzostanci.DatIzo >
@PocSkoGod) AND (dbo.tIzostanci.DatIzo < @ZavPrvPoGo)
Obratite paznju na HAVING i znakove poredjenja (><),pogotovu u delu gde poredim opseg datuma i rezultat u osnovu na taj opseg. Dobijam rezultat ali ne onaj koji mi je potreban, izgleda obracunava nesto ali ne kontam sta. Posto mu saljem iz klijenta format datum i to onaj njegov DEFAULT a to je MM/dd/yyyy....
Da li uopste moze da se porede datetime typovi kao int i bigint
Izvinjavam se zbog nazgrapnog koda!! ;-)
|
[ goranvuc @ 22.07.2007. 11:48 ] @
Pa npr. mozes koristiti Convert funkciju:
Code:
...
... AND (dbo.tIzostanci.DatIzo < CONVERT(DATETIME, @ZavPrvPoGo, 101))
gde si trebao da taj parametar predvidis kao varchar tip, a ne datetime, pa kao string da ga prosledis tvojoj proceduri.
[ borcha @ 22.07.2007. 11:56 ] @
aaaa, ja sam bosanac pa malo koci znas.....!! Da stringgg.. Bas sam gledao covert valute ova 101 je American! A moze bilo koji stil na pr. 103 oce li ga SQL S. prihvatiti...?
[ goranvuc @ 22.07.2007. 11:58 ] @
Kako ga posaljes - tako ce ga prihvatiti  Onaj treci parametar zato i postoji, da CONVERT funkcija zna gde je sta - bukvalno receno.
Inace 103 ti je "dd/mm/yy"
[ borcha @ 22.07.2007. 12:02 ] @
E, hvala ... napatio sam se ko isus!
[ borcha @ 22.07.2007. 13:23 ] @
e ono je super, izbacuje mi sve Od tog pocetnog datuma do zavrsnog datuma ali po datumima za taj opseg.
Znaci ako je pocetni datum 1-sep-2006 zavrsni datum 1-dec2006 lista mi stavke pojedinacno po svakom datumu koji se nadje u tom opsegu.
Mene interesuje zasto nece da mi zbroji stavke npr. broj casova izostanka po datumima u postavljenom opsegu? evo koda:
Code: SELECT DISTINCT
dbo.tIzostanci.DatIzo AS Expr2, dbo.tIzostanci.ID_Ucenik, dbo.tIzostanci.ID_Skola, dbo.tIzostanci.ID_SkoGod, dbo.tIzostanci.DatIzo AS Expr3,
SUM(dbo.tIzostanci.BroCasIzo) AS brIzo, dbo.tIzostanci.BroCasIzo, dbo.tPodUce.ID_Ucenik AS Expr1, dbo.tPodUce.Prezime, dbo.tPodUce.Ime,
dbo.tIzostanci.DatIzo
FROM dbo.tPodUce INNER JOIN
dbo.tIzostanci ON dbo.tPodUce.ID_Ucenik = dbo.tIzostanci.ID_Ucenik
GROUP BY dbo.tIzostanci.ID_Ucenik, dbo.tIzostanci.ID_Skola, dbo.tIzostanci.ID_SkoGod, dbo.tIzostanci.BroCasIzo, dbo.tPodUce.ID_Ucenik,
dbo.tPodUce.Prezime, dbo.tPodUce.Ime, dbo.tIzostanci.DatIzo
HAVING (dbo.tIzostanci.DatIzo > CONVERT(DATETIME, '2006-9-1', 101)) AND (dbo.tIzostanci.ID_Skola = 1) AND (dbo.tIzostanci.ID_SkoGod = 1) AND
(dbo.tIzostanci.DatIzo < CONVERT(DATETIME, '2006-12-1 00:00:00', 101)) AND (dbo.tPodUce.ID_Ucenik = 2)
Izvinjavam se zbog koda!!
[ goranvuc @ 22.07.2007. 14:56 ] @
Ako dobro vidim, zato sto ono sto sumiras imas i u SELECT delu, tj. GROUP - ako nesto sumiras, onda ne mozes po tom istom polju i da grupises, tj. mozes, ali nema smisla ;)
Ovako treba:
Code:
SELECT DISTINCT
dbo.tIzostanci.DatIzo AS Expr2, dbo.tIzostanci.ID_Ucenik, dbo.tIzostanci.ID_Skola, dbo.tIzostanci.ID_SkoGod, dbo.tIzostanci.DatIzo AS Expr3,
SUM(dbo.tIzostanci.BroCasIzo) AS brIzo, dbo.tPodUce.ID_Ucenik AS Expr1, dbo.tPodUce.Prezime, dbo.tPodUce.Ime,
dbo.tIzostanci.DatIzo
FROM dbo.tPodUce INNER JOIN
dbo.tIzostanci ON dbo.tPodUce.ID_Ucenik = dbo.tIzostanci.ID_Ucenik
GROUP BY dbo.tIzostanci.ID_Ucenik, dbo.tIzostanci.ID_Skola, dbo.tIzostanci.ID_SkoGod, dbo.tPodUce.ID_Ucenik,
dbo.tPodUce.Prezime, dbo.tPodUce.Ime, dbo.tIzostanci.DatIzo
HAVING (dbo.tIzostanci.DatIzo > CONVERT(DATETIME, '2006-9-1', 101)) AND (dbo.tIzostanci.ID_Skola = 1) AND (dbo.tIzostanci.ID_SkoGod = 1) AND
(dbo.tIzostanci.DatIzo < CONVERT(DATETIME, '2006-12-1 00:00:00', 101)) AND (dbo.tPodUce.ID_Ucenik = 2)
Imas tu jos neka polja viska, ali ona "ne kvare".
[ borcha @ 22.07.2007. 15:04 ] @
Probao sam sa ovim prepravljenim kodom. Nece... Oped grupise po datumu..ne sumira!
[ goranvuc @ 22.07.2007. 15:11 ] @
Izvini, nisam procitao detaljno tvoj problem zato sto mi je odmah "izbilo oci" ovo prethodno, ali sam ti u sustini i dao odgovor: Ono po cemu ne zelis da se grupise moras izbaciti iz SELECT i GROUP BY dela upita, a posto ti ovde treba samo suma, onda ti i ne treba GROUP BY deo, kao ni HAVING vec umesto nje moze i WHERE, tako da bi to bilo:
Code:
SELECT SUM(dbo.tIzostanci.BroCasIzo) AS brIzo
FROM dbo.tPodUce INNER JOIN
dbo.tIzostanci ON dbo.tPodUce.ID_Ucenik = dbo.tIzostanci.ID_Ucenik
WHERE (dbo.tIzostanci.DatIzo > CONVERT(DATETIME, '2006-9-1', 101)) AND (dbo.tIzostanci.ID_Skola = 1) AND (dbo.tIzostanci.ID_SkoGod = 1) AND
(dbo.tIzostanci.DatIzo < CONVERT(DATETIME, '2006-12-1 00:00:00', 101)) AND (dbo.tPodUce.ID_Ucenik = 2)
[ borcha @ 22.07.2007. 15:20 ] @
Hvala, hvala to je to..radi
[ priki @ 10.08.2007. 12:39 ] @
postavi CONVERT(DATETIME, '2006-9-1', 104))
to je za naš format datuma
[ Teks @ 19.08.2007. 11:56 ] @
Za moj ukus imaš previše uslova u upitu za početak
Polni sa nekim jednostavnijom modelom pa ga "do teši" da radi šta ti treba
Svaki korak proveravaj da vidiš da li si na dobrom putu
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|