Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Access i SQL1999 :(

[es] :: Access :: Access i SQL1999 :(

[ Pregleda: 3221 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

tmpKorisnik
korisnik kinsirok

Član broj: 202895
Poruke: 15
*.isp.krstarica.net.



Profil

icon Access i SQL1999 :(27.11.2008. u 16:31 - pre 187 meseci
Koliko sam upucen na FON u se radi SQL na osnovu SQL1999 standarda.
Mislim da mi zbog toga sledeci upit ne radi u Accessu:

Code:

SELECT (CASE WHEN EXTRACT (MONTH FROM P.DATUMVREME)IN (1,2,3) THEN '1'
             WHEN EXTRACT (MONTH FROM P.DATUMVREME)IN (4,5,6) THEN '2' 
             WHEN EXTRACT (MONTH FROM P.DATUMVREME)IN (7,8,9) THEN '3'
             WHEN EXTRACT (MONTH FROM P.DATUMVREME)IN (10,11,12) THEN '4'
END)AS KVARTAL,
    V.TIPVOZILA, COUNT(*)AS UKUPAN_BROJ_PLANIRANIH_POLAZAKA, 

SUM(CASE WHEN P.STATUS ='USPESAN'THEN 1 ELSE 0 END)AS BROJ_USPESNIH,

SUM(CASE WHEN P.STATUS ='OTKAZAN'THEN 1 ELSE 0 END)AS BROJ_OTKAZANIH,    
SUM(CASE WHEN P.STATUS ='KASNJENJE'THEN 1 ELSE 0 END)AS BR_POL_SA_KASNJ

FROM POLAZAK P INNER JOIN VOZILO V ON P.SIFRAVOZILA = V.SIFRAVOZILA

WHERE EXTRACT (YEAR FROM P.DATUMVREME) = 2004

GROUP BY CASE WHEN EXTRACT(MONTH FROM P.DATUMVREME) IN (1,2,3) THEN '1'
              WHEN EXTRACT(MONTH FROM P.DATUMVREME) IN (4,5,6) THEN '2' 
              WHEN EXTRACT(MONTH FROM P.DATUMVREME) IN (7,8,9)THEN '3'              
              WHEN EXTRACT(MONTH FROM P.DATUMVREME) IN (10,11,12) THEN '4' END, V.TIPVOZILA;



u helpu za ACCESS sam uspeo da pronadjem zamenu za : EXTRACT(MONTH FROM P.DATUMVREME) to je jednostavna Month(P.DATUMVREME) f-ja
ali ne mogu da pronadjem koja je sintaksa CASE naredbe.

Mislim da Access koristi ANSISQL92 (siguran sam za Access2003) standard...moze me neko malo uputiti...neke reference ili...

PS
Primer koji sam naveo je sa sajta FON-a Baze podataka, kao i resenje ali i Access baza nad kojom radim upite

Pozdrav


[Ovu poruku je menjao tmpKorisnik dana 27.11.2008. u 23:30 GMT+1]
 
Odgovor na temu

tmpKorisnik
korisnik kinsirok

Član broj: 202895
Poruke: 15
212.200.180.*



Profil

icon Re: Access i SQL1999 :(27.11.2008. u 23:09 - pre 187 meseci
Pa dobro...moze li mi bar neko reci koja je sintaksa za
CASE izraz a moze se primeniti u ACCESSu

U SQL1999 je:

CASE
WHEN uslov1 THEN rezultat1
WHEN uslov2 THEN rezultat2
...
END.

,ali to NE RADI u ACCESSu (2003 ili 2000).

Moze li primer jednostavnog CASE izraza...upit nad jednom tabelom i nad jednom kolonom?
 
Odgovor na temu

izonic
ishab zonic
Tuzla

Član broj: 38128
Poruke: 591
*.PPPoE-1028.sa.bih.net.ba.

Sajt: www.icentar.ba


+2 Profil

icon Re: Access i SQL1999 :(28.11.2008. u 15:36 - pre 187 meseci
Conditional Expressions

Access: IIF(Condition, ReturnIfTrue, ReturnIfValue)
T-SQL: CASE WHEN Condition THEN ReturnIfTrue ELSE ReturnIfFalse END

Converting NULL values

Access: NZ(Value, ValueToReturnIfNull)
T-SQL: COALESCE(Value, ValueToReturnIfNull) -- or -- ISNULL
zxz
 
Odgovor na temu

domaci_a_nas
PHP developer

Član broj: 42333
Poruke: 524
*.dynamic.sbb.rs.



+8 Profil

icon Re: Access i SQL1999 :(28.11.2008. u 16:30 - pre 187 meseci
Vidiš kako je prostije u Accessu? A ekvivalent za Extract (MONTH FROM DatumVreme) je samo Month(DatumVreme), Year(DatumVreme) i tako...
Ozbiljan i odgovoran mladić
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Access i SQL1999 :(28.11.2008. u 18:12 - pre 187 meseci
Ako koristis Access za vezbanje SQL, onda ne moze CASE da radi. Postoje zamene za CASE, kao sto vidis.

Medjutim, tvoj SQL izkaz sa CASE i GROUP BY nije nista drugo nego ono sto se u SQL zove PIVOT. To si mogao i u MS SQL da postignes sa PIVOT. Naravno da je u MS SQL lakse napisati CASE i GROUP BY nego PIVOT. E sad, kad je PIVOT u pitanju, tu Access ima jednu malu tajnu, a to je Cross-tab wizard. Upotrebom Accessovog Cross-tab wizarda dobijes bas ono sto ti treba:

Kvartal Planirano Uspesno Otkazano Kasnjenje
---------------------------------------------


Posao je laksi ako prethodno napravis kveri koji izracunava kvartal i vraca Kvartal (1,2,3,4) i Status (Uspesno/Otkazano/Kasnjenje)

Q1:
SELECT Kvartal, Status
FROM <nesto>

Onda na taj Q1 primenis CrossTab kveri (upotrebis wizard) i dobijes Uspesno/Otkazano/Kasnjenje po kvartalu u zaglavlju rezultata, a Ukupno ce ti wizard pokazati kao COUNT(*) to jest SUM(Uspesno/Otkazano/Kasnjenje) za svaki red. Probaj i videces da je mnogo lakse nego u ANSI SQL ili ovo sto ti savetuju sa Switch, IF i slicno.


Kako izracunati kvartal? Moze switch, evo funkcija, iako ne preporucujem:
Code:

Function Q(intMonth As Integer) As Integer

If Month > 12 Or Month < 1 Then
    Q = 0
End If

Q = Switch(intMonth = 1, 1 _
            , intMonth = 2, 1 _
            , intMonth = 3, 1 _
            , intMonth = 4, 2 _
            , intMonth = 5, 2 _
            , intMonth = 6, 2 _
            , intMonth = 7, 3 _
            , intMonth = 8, 3 _
            , intMonth = 9, 3 _
            , intMonth = 10, 4 _
            , intMonth = 11, 4 _
            , intMonth = 12, 4)

End Function


Zastio ne preporucujem ovakvo resenje:
Meni bi bilo lakse da napravim tabelu Q sa 12 rekorda, (Month,Q) i da je onda koristim u kverijima sa mesecima da mi vrati kvartal. Da koristis SWITCH , ili udf u kveriju - nije bas efikasno, sporo je i sa malim brojem rekorda.

:-)

 
Odgovor na temu

domaci_a_nas
PHP developer

Član broj: 42333
Poruke: 524
*.dynamic.sbb.rs.



+8 Profil

icon Re: Access i SQL1999 :(28.11.2008. u 19:24 - pre 187 meseci
Poštovani druže Zidar:

Zašto ne :
Code:
Public Function Kvartal(KojiMesec As Byte)
Kvartal = Int((KojiMesec + 2) / 3)
End Function
?
Ozbiljan i odgovoran mladić
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Access i SQL1999 :(28.11.2008. u 22:39 - pre 187 meseci
Nikola, odlicno zapazanje i odlicna funkcija. Ali funkcija u Access kveriju nije dobra ideja, kakva god da je. Poenta je da coveku treba cross-tab kveri i ako moze SQL resenje. Znas ono 'The best code is no code at all' :-)
 
Odgovor na temu

tmpKorisnik
korisnik kinsirok

Član broj: 202895
Poruke: 15
212.200.180.*



Profil

icon Re: Access i SQL1999 :(29.11.2008. u 00:48 - pre 187 meseci
Hvala vam puno, pomogli ste... ma ubise me silni standardi...
Ono sto zelim jeste da NAUCIM da radim sa SQL om...ali sa sto manje wizarda...znaci cist SQL kod...SQL1999 ili neki drugi standard

Radio sam neke proste upite, i upite nad vise tabela pomocu MSEntManagera, sto me je dosta "zaglupilo".
Uglavnom sam razvijao ADO.NET aplikacije i sasvim mi je bilo dovoljno da generisem upip preko MSEntMngr pa ga kopiram u aplikaciju ili ako imam pristupa bazi samo ga pozovem... Medjutim shvatio sam da od toga nema 'leba kad sam bio na malo ozbiljnijem razgovoru za posao. Tako da sam sada uzeo skripte sa FON-a i polako sve iz pocetka i posto sam ranije radio sa nekim drufgim standardom...(vise zabusavao) resio sam da zakrpim rupe u znanju (ne znanju )...i u startu se vec pojavise problemcici... A ja kao nabiflao SQL1999

Jos jednom hvala na pomoci!

Ako bilo ko moze da me uputi na STA I KAKO...neka dobra knjiga ili izvor na netu...prikladno mom problemu neka postuje
jer ja ne znam odakle da pocnem a vi imate iskustva... Inace nemojte mi reci GOOGL jer dok skinem materijal, proucim ga, razvrstam...odose dani... mada tako radim.
Eto malo gotovanim ali se nadam da me razumete (i voljni ste pomoci)

E, da.. koja baza podrzava 100% SQL1999?

I za admina: Znam da tema ima veze sa accessom (ali u tom konretnom primeru) samo sam mislio da je bolje da bude u Baze podataka jer sam ocekivao neke paralele izmedju standarda i implementacije konretnih standarda u konretnim bazama podataka...

UH smorih i sebe, a ne vas
 
Odgovor na temu

Trtko
Koprivnica

Član broj: 69494
Poruke: 695
93.159.68.*



+8 Profil

icon Re: Access i SQL1999 :(29.11.2008. u 13:42 - pre 187 meseci
Ajme Nikolaaaaa, vidi se da apstiniraš od alkohola
pa u accessu ima funkcija ,

Kvartal = DatePart("q", bilokojidatum)

No složio bi se s Zidarom a i ne, nije preporučljivo koristiti funkcije ako su tabele velike , usporava izvršenje
queria, ali zanemarivo ako su tablice relativno male, a upiti se ne koriste tako često.

 
Odgovor na temu

domaci_a_nas
PHP developer

Član broj: 42333
Poruke: 524
*.dynamic.sbb.rs.



+8 Profil

icon Re: Access i SQL1999 :(29.11.2008. u 16:15 - pre 187 meseci
Ajme Trle, mojne sa mnom te fore ovo ono Drug Zidar je rekao da je argument mesec, tj broj od 1-12...
Ozbiljan i odgovoran mladić
 
Odgovor na temu

Trtko
Koprivnica

Član broj: 69494
Poruke: 695
87.252.132.*



+8 Profil

icon Re: Access i SQL1999 :(29.11.2008. u 17:15 - pre 187 meseci
No dobro dobro, imas pravo al ja sam posao od gore navedenog
.........
SELECT (CASE WHEN EXTRACT (MONTH FROM P.DATUMVREME)IN (1,2,3) THEN '1'
WHEN EXTRACT (MONTH FROM P.DATUMVREME)IN (4,5,6) THEN '2'
WHEN EXTRACT (MONTH FROM P.DATUMVREME)IN (7,8,9) THEN '3'

..........

datum su pretvarali u mjesece sto nije bilo potrebno,
hehe a mozda je i Zidar presao na našu metodu "programiranja" , al on mjesto pive koristi nešto zesce

funkcija ti je inače OK

 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Access i SQL1999 :(01.12.2008. u 15:45 - pre 187 meseci
:-)
Moram Nikoli ponovo da dam pohvalu za funkciju - jer se njalakse moze iskoristiti u kveriju.

SELECT
KojiMjesec
, Int((KojiMesec + 2) / 3) AS Kvartal
FROM TAbela


To ce da radi brze nego

SELECT KojiMjesec, Fun(KojiMjesec) AS Kvartal FROM Tabela

pa ma kako bila funkcija FUN dobro napisana. Od sve tri ponudjene funkcije, Nikolina bi radila najbrze, pa verovatno Trletova i moja tek na kraju. Zato i ne pisem funkcije ako bas ne moram :-) A opet, ne moz' covek uvek da se seti resenja bez programiranja.

I Trle je u pravu - ako nema puno podataka, moze i korisnicka funkcija u kveriju. Nije po ANSI standaru, ali ni jedan SQL produkt nije 100% po standardu, pa nikom nista.

Volim kad su svi u pravu.

:-)
 
Odgovor na temu

[es] :: Access :: Access i SQL1999 :(

[ Pregleda: 3221 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.