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

Mozgalica za Juli 2012 - broj 2, dinamicki WHERE

[es] :: Baze podataka :: Mozgalica za Juli 2012 - broj 2, dinamicki WHERE

[ Pregleda: 1868 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Zidar
Canada

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



+78 Profil

icon Mozgalica za Juli 2012 - broj 2, dinamicki WHERE21.06.2012. u 18:44 - pre 84 meseci
Data je tabela #Skole, koja izgleda ovako:
Code:

Skola                        TipSkole
------------------------- -----------
Brace Karic                         1
Dositej Obradovic                   4
Harvard                             1
Mika Alas                           3
Narodni heroji                      0
Oxford                              1
QL Akademija                        2
Vuk Karadzic                        4

(8 row(s) affected)


Kolona [TipSkole] kazuje nam kako je skola finansirana. Tip 1 ili 2 predstavljaju privatne skole. Svi ostali tipovi predstavljaju drzavne skole. Cesto se traze dve vrste upita, koji vracaju:
a) SVE skole iz tabele
b) samo drzavne skole

Napisati skriptu koja koristi parametar @SamoDrzavneSkole u SELECT iskazu, tako da se zavisno od vrednosti parametra dobiju na izlazu SVE skole, ili SAMO DRZAVNE skole. Skripta sme da ima samo jedan SELECT iskaz, odlucivanje o tome sta se pokazuje mora da se desi u WHERE. Parametar @SamoDrzavneSkole moze da ima vrednosti 1 ili 0. Ako je

@SamoDrzavneSkole = 1 => vratiti samo drzavne skole
@SamoDrzavneSkole = 0 => vratiti SVE skole

Pravilno napisana skripta treba da izgleda ovako:
Code:

DECLARE @SamoDrzavneSkole int
;
SET @SamoDrzavneSkole = 1
;
SELECT *
FROM #Skole WHERE @SamoDrzavneSkole = 1
;

Skripta u primeru je pravilna, ali ne daje tacan rezultat.

Vi treba da napisete skriptu koja vraca tacan rezultat, samo jedna SELECT, sve se odlucuje u WHERE.
Skripta treba da vraca tacan rezultat za obe vrednosti parametra 1 ili 0.
Za ostale vrednosti parametra, skripta treba da vrati prazan skup - 0 rows.

Evo je tabela i test podaci.
Code:

IF Object_ID('tempdb..#Skole') IS NOT NULL DROP TABLE #Skole
;
CREATE TABLE #Skole 
(
Skola varchar(25) NOT NULL PRIMARY KEY
, TipSkole int NOT NULL CHECK (TipSkole IN (0,1,2,3,4,5))
)
;

INSERT INTO #Skole (Skola, TipSkole)
SELECT 'Narodni heroji'        ,0
UNION
SELECT 'Vuk Karadzic'        ,4
UNION
SELECT 'Brace Karic'        ,1
UNION
SELECT 'QL Akademija'        ,2
UNION
SELECT 'Dositej Obradovic'    ,4
UNION
SELECT 'Mika Alas'            ,3
UNION
SELECT 'Harvard'            ,1
UNION
SELECT 'Oxford'                ,1
;
-- (8 row(s) affected)

SELECT * FROM #Skole
;




Znam da je vrucina i da se nikome ne radi, ali eto, da se igramo...
:-)
 
Odgovor na temu

Zidar
Canada

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



+78 Profil

icon Re: Mozgalica za Juli 2012 - broj 2, dinamicki WHERE22.06.2012. u 13:48 - pre 84 meseci
(Jos uvek nema reseja) => (mnogo je tesko) OR (svi su na plazi) OR (svi gledaju fudbal)

Cekacemo do kraja dana kod mene (ponoc u Beogradu)...

 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 2572



+1069 Profil

icon Re: Mozgalica za Juli 2012 - broj 2, dinamicki WHERE22.06.2012. u 14:42 - pre 84 meseci
Malopre sam video, pa tek sada stavljam (trivijalno) rešenje. U pitanju je Oracle, pa se bind parametri označavaju sa ":"

Code (sql):

SELECT * FROM skole
WHERE :SamoDrzavne = 0
   OR (:SamoDrzavne = 1 AND TipSkole IN (0,3,4,5))
 


Prikačeni fajlovi
 
Odgovor na temu

Zidar
Canada

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



+78 Profil

icon Re: Mozgalica za Juli 2012 - broj 2, dinamicki WHERE22.06.2012. u 14:49 - pre 84 meseci
Bravo. Ko zna - zna. Da je trivijalno, vec bi se jos neko javio. Ili je ipak tacno (Svi su na plazi)

Jos uvek nema resenja za MS SQL i ostale sisteme....
 
Odgovor na temu

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Re: Mozgalica za Juli 2012 - broj 2, dinamicki WHERE07.10.2012. u 22:43 - pre 80 meseci
Kasnim poodavno, ali posto sam potrosio pola sata da nadjem pravilnu sintaksu, nek se nadje.

MySQL
Code (sql):

SET @SamoDrzavne = 0;
SELECT * FROM Skole WHERE IF (@SamoDrzavne = 1 , TipSkole IN (0,1) , TipSkole NOT IN (0,1));
 



ps. hvala Zidaru na trudu
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

Koce
DBA
Serbia, Belgrade

Član broj: 59217
Poruke: 142
*.static.sbb.rs.



+1 Profil

icon Re: Mozgalica za Juli 2012 - broj 2, dinamicki WHERE11.10.2012. u 12:38 - pre 80 meseci

MSSQL

Verzija 2:

declare @SamoDrzavne int = 0;
SELECT * FROM [#Skole]
WHERE
(
CASE
WHEN @SamoDrzavne = 1 AND [TipSkole] not in (1,2) THEN 1
WHEN @SamoDrzavne = 0 THEN 1
ELSE 0
END
) = 1


[Ovu poruku je menjao Koce dana 11.10.2012. u 19:48 GMT+1]
 
Odgovor na temu

[es] :: Baze podataka :: Mozgalica za Juli 2012 - broj 2, dinamicki WHERE

[ Pregleda: 1868 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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