Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 5 odgovora
  • 3.438 pregleda

Najnovija ↓

Mozgalica za Juli 2012 - broj 2, dinamicki WHERE 21.06.2012. u 19:44 · pre 174 meseca #1
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...
:-)
Re: Mozgalica za Juli 2012 - broj 2, dinamicki WHERE 22.06.2012. u 14:48 · pre 174 meseca #2
(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)...

:-)
Re: Mozgalica za Juli 2012 - broj 2, dinamicki WHERE 22.06.2012. u 15:49 · pre 174 meseca #4
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....
Re: Mozgalica za Juli 2012 - broj 2, dinamicki WHERE 07.10.2012. u 23:43 · pre 171 mesec #5
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
Potpis
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
Re: Mozgalica za Juli 2012 - broj 2, dinamicki WHERE 11.10.2012. u 13:38 · pre 171 mesec
izmenjeno 1 put, poslednji put Koce 11.10.2012. u 19:48
  1. Koce11.10.2012. u 19:48zapis iz teksta poruke
#6

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
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme