Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --I1
- /*1. Napišite upit kojim ćete vratiti 2 stupca: naziv proizvoda
- i prodanu količinu proizvoda, kupcima iz Hrvatske koja telefon
- započinje znamenkama 1, 3 ili 5, sortirati padajuće po količini prodanih*/
- select
- p.Naziv as 'Naziv proizvoda',
- sum(s.Kolicina) as 'Prodana količina'
- from Proizvod as p
- inner join Stavka as s on s.ProizvodID = p.IDProizvod
- inner join Racun as r on s.RacunID = r.IDRacun
- inner join Kupac as k on r.KupacID = k.IDKupac
- inner join Grad as g on k.GradID = g.IDGrad
- inner join Drzava as d on g.DrzavaID = d.IDDrzava
- where d.Naziv LIKE 'Hrvatska'
- and k.Telefon LIKE '[135]%'
- group by p.Naziv
- order by [Prodana količina] desc
- /*2.Napišite upite kojima ćete umetnuti kupca Đuru Đurića iz Yokohame (Japan)*/
- declare @idDrzave int
- declare @idGrada int
- insert into Drzava (Naziv)
- values('Japan')
- set @idDrzave = SCOPE_IDENTITY()
- insert into Grad (Naziv, DrzavaID)
- values ('Yokohama', @idDrzave)
- set @idGrada = SCOPE_IDENTITY()
- insert into Kupac (Ime, Prezime, GradID)
- values('Đuro', 'Đurić', @idGrada)
- /*3.Napiši naredbu za izradu nove tablice NajmanjeProdavaniProizvodi s obaveznim stupcima IDProizvod, Naziv,
- ProdanihKomada (bez primarnog ključa). Napišite upit koji uzima proizvode koji su prodani u količini manji od 10 (sum(stavka.Kolicina))
- i njihove ID-eve, Naziv i ProdanihKomada upisuje u NajmanjeProdavaniProizvodi.*/
- create Table NajmanjeProdavaniProizvodi (
- IDProizvod int not null,
- Naziv nvarchar(50) not null,
- ProdanihKomada tinyint not null
- )
- insert into NajmanjeProdavaniProizvodi (IDProizvod, Naziv, ProdanihKomada)
- select p.IDProizvod,
- p.Naziv,
- isnull((select sum(Kolicina) from Stavka where ProizvodID = p.IDProizvod),0)
- from Proizvod as p
- where (select sum(Kolicina) from Stavka where ProizvodID = p.IDProizvod) < 10
- or (select sum(Kolicina) from Stavka where ProizvodID = p.IDProizvod) IS NULL
- /*4. DDL naredbe za kreiranje tablica, stupaca i ograničenja*/
- create table Student (
- IDStudent int identity,
- Ime nvarchar(50) not null,
- Prezime nvarchar(50) not null,
- DatumRodjenja date not null,
- JMBAG nvarchar(15) not null,
- CijenaSkolarine money not null,
- RedovniStudent bit not null,
- constraint PK_Student primary key(IDStudent),
- constraint UQ_Student unique(JMBAG)
- )
- create table Kolegij (
- IDKolegij int identity,
- Naziv nvarchar(50) not null,
- Ects tinyint not null,
- constraint PK_Kolegij primary key(IDKolegij),
- constraint CH_Kolegij check(Ects between 1 and 7)
- )
- create table Upis (
- IDUpis int identity,
- StudentID int not null,
- KolegijID int not null,
- DatumUpisa date not null default getdate(),
- constraint PK_Upis primary key(IDUpis),
- constraint FK_UpisStudent foreign key(StudentID) references Student(IDStudent),
- constraint FK_UpisKolegij foreign key(KolegijID) references Kolegij(IDKolegij)
- )
- /*Napišite upit kojim ćete ispisati ID-eve
- kreditnih kartica i koliko puta je korištena, ali
- samo račune iz 2001. godine. Sortirati rastuće
- prema tome koliko puta je korištena. N
- korištenja kreditne kartice znači da je za nju
- izdano N računa. */
- select kk.IDKreditnaKartica, COUNT(r.KreditnaKarticaID) as PutaKoristena from KreditnaKartica as kk
- inner join Racun as r on r.KreditnaKarticaID = kk.IDKreditnaKartica
- where r.DatumIzdavanja like '%2001%'
- group by kk.IDKreditnaKartica
- order by 2 asc
- /*Predložite relacijski model koji rješava
- sljedeći problem te ga implementirajte: treba
- omogućiti čuvanje podataka o proizvođačima
- automobila (BMW, Hyundai, Audi, …) te o
- njihovim modelima (BMW 3, BMW i8,
- Hyundai i40, Audi Q3, Audi Q5, …). Dodatno,
- svaki model automobila se može proizvoditi s
- više različitih (unaprijed definiranih)
- obujmova motora: 1.1, 1.3, 1.5, 2.0, … */
- create table Automobil
- (
- IDAtuo int primary key identity,
- ProizvodacID int foreign key references Proizvodac(IDProizvodac),
- ModelID int foreign key references Model(IDModel),
- )
- create table Proizvodac
- (
- IDProizvodac int primary key identity,
- Naziv nvarchar(255)
- )
- create table Model
- (
- IDModel int primary key identity,
- Naziv nvarchar(255),
- ObujamMotoraID int foreign key references ObujamMotora(IDObujamMotora),
- )
- create table ObujamMotora
- (
- IDObujamMotora int primary key identity,
- Naziv nvarchar(255)
- )
- --Drop postojećeg retka u tablici
- alter table Film
- drop COLUMN TrajanjeMinuta
- --Dohvatite imena i prezimena 5 najboljih komercijalista, te uz svakog dohvatite i iznos prodane robe.
- select top 5 k.Ime, k.Prezime,
- (
- select SUM(s.UkupnaCijena) from Stavka as s
- where s.RacunID in
- (
- select r.IDRacun from Racun as r
- where r.KomercijalistID = k.IDKomercijalist
- )
- ) as IznosProdaneRobe
- from Komercijalist as k
- order by 3 desc
- --I2
- /*5. Pogled koji vraća sve komercijaliste sa bar jednom prodajom.
- Iskoristit pogled za stupce: ime, prezime, godinu izdavanja te koliko računa te godine pojedini komercijalist realizirao po godinama*/
- create view vwKomercijalist
- as
- select * from Komercijalist as k
- inner join Racun as r on r.KomercijalistID = k.IDKomercijalist
- drop view vwKomercijalist
- select * from vwKomercijalist
- select Prezime + ' ' + Ime as Komercijalist, year(DatumIzdavanja) as GodinaIzdavanja, count(*) as UkupnoRacuna
- from vwKomercijalist
- group by Prezime + ' ' + Ime, year(DatumIzdavanja)
- drop view vwKomercijalist
- /*6. Pogled koji vraća države sa najmanje 3 grada.
- Promijeniti pogled tako da vraća i točan broj gradova.*/
- create view vwDrzava
- as
- select * from Drzava
- where (select count(*) from Grad where DrzavaID = IDDrzava) >= 3
- alter view vwDrzava
- as
- select *, (select count(*) from Grad where DrzavaID = IDDrzava) as BrojGradova from Drzava
- where (select count(*) from Grad where DrzavaID = IDDrzava) >= 3
- /*7.Pogled vraća sve proizvode koji imaju definiranu boju
- Sprječiti da se ubaci nešto što kroz pogled neće biti dohvatljivo*/
- create view vwProizvod
- as
- select * from Proizvod
- where Boja IS NOT NULL
- select * from vwProizvod
- alter view vwProizvod
- as
- select * from Proizvod
- where Boja IS NOT NULL
- with check option
- /*8. Pogled koji dohvaća godinu i mjesec te koliko MasterCard kartica istječe tad
- Iskoristiti pogled za 10 mjeseci sa najviše kartica koje istječu
- Sprječiti da netko može potrgat pogled brisanjem tablice KreditnaKartica*/
- create view vwKreditnaKartica
- as
- select
- cast(IstekGodina as nvarchar(4)) + '-' + cast(IstekMjesec as nvarchar(2)) as DatumIsteka,
- count(*) as KolicinaKartica
- from KreditnaKartica
- where Tip = 'MasterCard'
- group by cast(IstekGodina as nvarchar(4)) + '-' + cast(IstekMjesec as nvarchar(2))
- select top 10 *
- from vwKreditnaKartica
- order by KolicinaKartica desc
- alter view vwKreditnaKartica
- with schemabinding
- as
- select
- cast(IstekGodina as nvarchar(4)) + '-' + cast(IstekMjesec as nvarchar(2)) as DatumIsteka,
- count(*) as KolicinaKartica
- from dbo.KreditnaKartica
- where Tip = 'MasterCard'
- group by cast(IstekGodina as nvarchar(4)) + '-' + cast(IstekMjesec as nvarchar(2))
- /*Napravite pogled koji će se koristiti za dohvat
- svih računa kojima su kupci iz Njemačke.
- Prikažite koliko je računa izdano po kojem
- nazivu grada korištenjem tog pogleda. */
- create view vwRacun
- as
- select distinct g.Naziv, COUNT(r.IDRacun) as BrojRacuna from Racun as r
- inner join Kupac as k on k.IDKupac=r.KupacID
- inner join Grad as g on g.IDGrad=k.GradID
- where g.DrzavaID = 2
- group by g.Naziv
- select * from vwRacun
- drop view vwRacun
- /*Napravite pogled koji vraća ID-eve svih
- komercijalista te ID-eve svih izdanih računa.
- Pri tome omogućite da pogled ostane
- zaštićen od svih naknadnih promjena tablica
- o kojima ovisi.*/
- create view vwKomercijalist
- WITH SCHEMABINDING
- as
- select Komercijalist.IDKomercijalist,Racun.IDRacun from dbo.Komercijalist
- inner join dbo.Racun on Racun.KomercijalistID=Komercijalist.IDKomercijalist
- select * from vwKomercijalist
- /*Napravite pogled koji dohvaća 10 proizvoda koji su najviše prodavani. Stupci koje pogled vraća neka budu ID i
- naziv te ukupna količina prodanih proizvoda.*/
- create view vwProizvodi
- as
- select top 10 p.IDProizvod, p.Naziv, COUNT(s.ProizvodID) as UkupnoProdanih from Proizvod as p
- inner join Stavka as s on s.ProizvodID=p.IDProizvod
- group by p.Naziv,p.IDProizvod
- order by 3 desc
- /*Promijenite pogled tako da bude zaštićen, čvrsto vezan uz tablice i da ne dopušta izmjene koje neće biti
- vidljive kroz pogled*/
- alter view vwProizvodi
- with encryption, SCHEMABINDING
- as
- select top 10 p.IDProizvod, p.Naziv, COUNT(s.ProizvodID) as UkupnoProdanih from dbo.Proizvod as p
- inner join dbo.Stavka as s on s.ProizvodID=p.IDProizvod
- group by p.Naziv,p.IDProizvod
- order by 3 desc
- WITH CHECK OPTION
- --I3
- /*9. Maknite sve nk indekse sa dbo.Proizvod, pa pitanja.*/
- --P: na koliko stranica su smješteni podaci iz tablice Proizvod?
- --O: na 6 podatkovnih stranica (i ima jedna indeks stranica)
- dbcc traceon(3604)
- dbcc ind([AdventureWorksOBP], [Proizvod], -1)
- --P: na prvoj podatkovnoj stranici, koji je IDProizvod za 1 i zadnji proizvod na 1. stranici?
- --O: 1. je 1, zadnji je 425
- dbcc page(AdventureWorksOBP, 1, 560, 3) with tableresults
- -- P: na kojoj stranici se nalazi proizvod s ID-jem 777?
- -- O: nalazi se na stranici 563(slot 70)
- dbcc page(AdventureWorksOBP, 1, 563, 3) with tableresults
- -- P: umetnite novi proizvod, na koju je stranicu dodan?
- -- O: budući da se sve sprema prema primarnom ključu koji se sam generira inkrementom, proizvod
- -- je dodan na zadnju stranicu (566) u slot 62
- insert into Proizvod (Naziv, BrojProizvoda, Boja, MinimalnaKolicinaNaSkladistu, CijenaBezPDV)
- values ('Mačje Oko', 'PR0907','Roza', 2, 12)
- dbcc page(AdventureWorksOBP, 1, 566, 3) with tableresults
- /*10. Optimizirati upit*/
- set statistics io on
- select
- IDKreditnaKartica,
- Broj,
- Tip
- from KreditnaKartica
- where Tip like 'Master%'
- and IstekGodina = 2007
- -- Scan count 1, logical reads 164
- create nonclustered index iKreditnaKartica on KreditnaKartica(IstekGodina)
- include(Tip, Broj)
- -- Scan count 1, logical reads 42
- --drop index iKreditnaKartica on KreditnaKartica
- /*Na koliko stranica su smješteni podaci iz
- tablice Potkategorija? Na koliko stranica su
- smješteni indeksi iz tablice
- Potkategorija? Koji je IDPotkategorija prve
- stavke na prvoj stranici?*/
- --DBCC IND('naziv_baze', 'naziv_tablice', -1)
- --DBCC PAGE('naziv_baze', FID, PID, 3) WITH TABLERESULTS
- set statistics io on
- DBCC TRACEON(3604)
- DBCC IND('AdventureWorksOBP', 'Kupac', -1)
- DBCC PAGE('AdventureWorksOBP', 1, 552, 3) WITH TABLERESULTS
- --Smješteni su na 1
- --IDPotkategorija 1
- /*Optimizirajte upit što je bolje moguće:
- SELECT DISTINCT PotkategorijaID FROM
- Proizvod WHERE Naziv LIKE 'P%' */
- SELECT DISTINCT PotkategorijaID FROM
- Proizvod WHERE Naziv LIKE 'P%'
- --logical reads 8
- CREATE NONCLUSTERED INDEX iProizvod ON Proizvod(naziv) include (PotkategorijaID)
- drop index Proizvod.iPorizvod
- --logical reads 2
- --I4
- /*11. Procedura koja prima ime i prezime komercijalista i ubacuje novoga, kroz izlazni parametar
- vraća novonastali id, odnosno -1 ukoliko isti već postoji (pa ga se ni ne mora ubacivat)*/
- create proc UbaciKomarcijalista
- @ime nvarchar(50),
- @prezime nvarchar(50),
- @idKomercijalista int output
- as
- if exists (select IDKomercijalist from Komercijalist where Ime = @ime and Prezime = @prezime) begin
- set @idKomercijalista = -1
- end
- else begin
- insert into Komercijalist (Ime, Prezime)
- values (@ime, @prezime)
- set @idKomercijalista = SCOPE_IDENTITY()
- end
- go
- declare @idKomercijalista int
- execute UbaciKomarcijalista 'Isus', 'Krist', @idKomercijalista output
- print @idKomercijalista
- execute UbaciKomarcijalista 'Isus', 'Krist', @idKomercijalista output
- print @idKomercijalista
- go
- /*12.Procedura prima ID proizvoda, provjerava postoji li i je li kad prodan, preko return mora vratit
- sljedeće vrijednosti -1 (ne postoji), 0 (postoji, nikad prodan) 1 (postoji i prodavan n puta)*/
- create proc ProvjeriProizvod
- @idProizvod int
- as
- if not exists (select Naziv from Proizvod where IDProizvod = @idProizvod)
- begin
- return -1
- end
- if @idProizvod IN (select p.IDProizvod from Proizvod as p
- where (select sum(Kolicina) from Stavka where ProizvodID = p.IDProizvod) IS NULL)
- begin
- return 0
- end
- return 1
- declare @ajdi int = 1001
- declare @rezultat int
- -- postojeći, nikad prodani proizvod
- exec @rezultat = ProvjeriProizvod @ajdi
- print @rezultat
- -- postojeći prodavani proizvod
- set @ajdi = 707
- exec @rezultat = ProvjeriProizvod @ajdi
- print @rezultat
- -- nepostojeći proizvod
- set @ajdi = 20000
- exec @rezultat = ProvjeriProizvod @ajdi
- print @rezultat
- select * from proizvod
- where (select sum(Kolicina) from Stavka where ProizvodID = IDProizvod) IS NOT NULL
- /*13. Implementirajte CRUD na Potkategorija s 2 procedure (C,U) i (R,D)
- Napravite umetanje, izmjenu, dohvaćanje i brisanje jedne potkategorije*/
- create proc CU_Potkategorija
- @idPotkategorije int output,
- @naziv nvarchar(50),
- @idKategorija int
- as
- if exists (select * from Potkategorija where IDPotkategorija = @idPotkategorije) begin
- update Potkategorija
- set Naziv = @naziv, KategorijaID = @idKategorija
- where IDPotkategorija = @idPotkategorije
- end
- else begin
- insert into Potkategorija (Naziv, KategorijaID)
- values (@naziv, @idKategorija)
- set @idPotkategorije = SCOPE_IDENTITY()
- end
- declare @noviAjdi int
- exec CU_Potkategorija @noviAjdi output, 'ZaPuknutLanac',4
- print @noviAjdi
- select * from Potkategorija where IDPotkategorija = @noviAjdi
- declare @noviAjdi int
- exec CU_Potkategorija @noviAjdi output, 'KljucZaLanac', 4
- select * from Potkategorija where IDPotkategorija = @noviAjdi
- create proc RD_Potkategorija
- @ajdiPostojeci int,
- @operacija char = 'R'
- as
- if @operacija = 'R' begin
- select
- *
- from Potkategorija
- where IDPotkategorija = @ajdiPostojeci
- end
- else if @operacija = 'D' begin
- print 'Brise se potkategorija: ' + (select Naziv from Potkategorija where IDPotkategorija = @ajdiPostojeci)
- delete from Potkategorija
- where IDPotkategorija = @ajdiPostojeci
- end
- declare @ajdiPostojeci int
- set @ajdiPostojeci = (select IDPotkategorija from Potkategorija where Naziv = 'KljucZaLanac')
- select * from Potkategorija where IDPotkategorija = @ajdiPostojeci
- exec RD_Potkategorija @ajdiPostojeci
- exec RD_Potkategorija @ajdiPostojeci, 'R'
- exec RD_Potkategorija @ajdiPostojeci, 'D'
- select * from Potkategorija where IDPotkategorija = @ajdiPostojeci
- -----------------
- create proc spZad1
- @idkupac int output,
- @ime nvarchar(50),
- @prezime nvarchar(50),
- @email nvarchar(50),
- @telefon nvarchar(50)
- as
- if not exists(select * from Kupac where @ime = Ime and @prezime = Prezime)
- begin
- insert into Kupac(Ime, Prezime, Email, Telefon) values(@ime, @prezime, @email, @telefon)
- set @idkupac = SCOPE_IDENTITY()
- return 1
- end
- else
- begin
- select @idkupac= IDKupac from Kupac where @ime = Ime and @prezime = Prezime
- return 0
- end
- declare @id int
- declare @vratila int
- exec @vratila = pZad1 @id output,'Petar', 'Hara', 'petarhara@com','05215125'
- print @id
- print @vratila
- /*Napišite proceduru koja prima naziv
- potkategorije i ID kategorije, umeće novu
- potkategoriju za tu kategoriju u tablicu
- Potkategorija i kroz izlazni parametar vraća
- vrijednost primarnog ključa umetnutog
- retka. Ako već postoji potkategorija zadanog
- imena za tu kategoriju, ne treba je upisivati
- ponovno i u tom slučaju kroz izlazni
- parametar vratite vrijednost -1. Pozovite
- proceduru dva puta s istim nazivom
- potkategorije i ID-om kategorije te ispišite
- vraćenu vrijednost. */
- create proc spKategorija
- @nazivPodkategorije nvarchar(255),
- @IDkategorija int,
- @ID int output
- as
- if exists (select * from Potkategorija where @nazivPodkategorije = Naziv)
- begin
- SET @ID = -1
- end
- else
- begin
- insert into Potkategorija(KategorijaID, Naziv) values(@IDkategorija,@nazivPodkategorije)
- SET @ID = SCOPE_IDENTITY()
- end
- declare @ID int
- exec procKategorija @nazivPodkategorije='ba',@IDkategorija= 1, @ID= @ID output
- print @ID
- drop proc spKategorija
- /*Implementirajte CRUD operacije na tablici
- Kategorija, ako znate da će se baza podataka
- koristiti i iz programskog jezika koji ne
- podržava rad s funkcijama na bazi podataka.
- Demonstrirajte korištenje napravljenih
- objekata.*/
- create proc spSelectKategorija
- as
- select * from Kategorija
- exec spSelectKategorija
- create proc spInsertKategorija
- @Naziv nvarchar(255)
- as
- insert into Kategorija(Naziv) values(@Naziv)
- exec spInsertKategorija 'Mobiteli'
- create proc spUpdateKategorija
- @IDKategorija int,
- @Naziv nvarchar(255)
- as
- update Kategorija
- set Kategorija.Naziv = @Naziv
- where Kategorija.IDKategorija = @IDKategorija
- exec spUpdateKategorija 7, 'IPhone'
- create proc spDeleteKategorija
- @IDKategorija int
- as
- delete from Kategorija
- where Kategorija.IDKategorija = @IDKategorija
- exec spDeleteKategorija 7
- /*Napišite proceduru koja prima kriterij po kojemu ćete filtrirati prezimena iz tablice Kupac.
- Neka procedura pomoću izlaznog parametra vrati broj zapisa koji zadovoljavaju zadani kriterij.
- Neka procedura vrati i sve zapise koji zadovoljavaju kriterij.
- Pozovite proceduru i ispišite vraćenu vrijednost.
- Uklonite proceduru.*/
- CREATE PROC p13
- @Filter nvarchar(50),
- @BrojZapisa int OUTPUT
- AS
- SELECT @BrojZapisa = COUNT(*) FROM Kupac WHERE Prezime LIKE @Filter
- SELECT * FROM Kupac WHERE Prezime LIKE @Filter
- GO
- DECLARE @Cnt int
- EXEC p13 '%hu%', @Cnt OUTPUT
- PRINT @Cnt
- /*Napišite proceduru koja za zadanog komercijalistu pomoću izlaznih parametara vraća njegovo ime
- i prezime te ukupnu zarađenu količinu novaca.*/
- CREATE PROC p14
- @KomercijalistID int,
- @Ime nvarchar(50) OUTPUT,
- @Prezime nvarchar(50) OUTPUT,
- @Zaradio money OUTPUT
- AS
- SELECT @Ime = Ime, @Prezime = Prezime
- FROM Komercijalist
- WHERE IDKomercijalist = @KomercijalistID
- SELECT @Zaradio = SUM(s.UkupnaCijena)
- FROM Racun AS r
- INNER JOIN Stavka AS s ON r.IDRacun = s.RacunID
- WHERE r.KomercijalistID = @KomercijalistID
- GO
- DECLARE @Ime nvarchar(50), @Prezime nvarchar(50), @Zaradio money
- EXEC p14 276, @Ime OUTPUT, @Prezime OUTPUT, @Zaradio OUTPUT
- PRINT @Ime
- PRINT @Prezime
- PRINT @Zaradio
- /*Napišite funkciju koja prima ID proizvoda i dohvaća broj prodanih primjeraka.
- Pozovite funkciju samostalno.
- Dohvatite nazive i boje svih proizvoda i uz svaki proizvoda
- ispišite koliko primjeraka je prodano. Promijenite funkciju tako da vrati 0 za one proizvode koji nisu prodani
- niti u jednom primjerku.*/
- create FUNCTION UkupnaKolicina
- (
- @ID int
- )
- RETURNS int
- AS
- BEGIN
- DECLARE @Ukupno int
- SELECT @Ukupno = Sum(Kolicina) FROM Stavka WHERE ProizvodID = @ID
- RETURN @Ukupno
- END
- GO
- DECLARE @Rez int
- SET @Rez = dbo.UkupnaKolicina(776)
- PRINT @Rez
- SELECT
- Naziv,
- Boja,
- dbo.UkupnaKolicina(IDProizvod) AS Prodano
- FROM Proizvod
- GO
- ALTER FUNCTION UkupnaKolicina
- (
- @ID int
- )
- RETURNS int
- AS
- BEGIN
- DECLARE @Ukupno int
- SELECT @Ukupno = Sum(Kolicina) FROM Stavka WHERE ProizvodID = @ID
- RETURN CASE
- WHEN @Ukupno IS NOT NULL THEN @Ukupno
- ELSE 0
- END
- END
- /*Napišite jednostavnu tabličnu funkciju koja prima dva datuma.
- Neka funkcija vrati broj računa, datum izdavanja i ime i prezime kupca za sve račune izdane između zadanih datuma.
- Iskoristite funkciju za dohvat računa između 01.06.2004. i 03.06.2004.
- Promijenite funkciju da datum vrati u hrvatskom formatu.*/
- CREATE FUNCTION DohvatiRacune
- (
- @D1 datetime,
- @D2 datetime
- )
- RETURNS TABLE
- AS
- RETURN
- SELECT r.BrojRacuna, r.DatumIzdavanja, k.Ime, k.Prezime
- FROM Racun AS r
- LEFT JOIN dbo.Kupac AS k ON r.KupacID = k.IDKupac
- WHERE r.DatumIzdavanja BETWEEN @D1 AND @D2
- GO
- SELECT * FROM DohvatiRacune('20040601', '20040603')
- GO
- ALTER FUNCTION DohvatiRacune
- (
- @D1 datetime,
- @D2 datetime
- )
- RETURNS TABLE
- AS
- RETURN
- SELECT r.BrojRacuna, CONVERT(char(10), r.DatumIzdavanja, 104) AS DatumIzdavanja, k.Ime, k.Prezime
- FROM Racun AS r
- LEFT JOIN dbo.Kupac AS k ON r.KupacID = k.IDKupac
- WHERE r.DatumIzdavanja BETWEEN @D1 AND @D2
- GO
- SELECT * FROM DohvatiRacune('20040601', '20040603')
- /*Napišite složenu tabličnu funkciju koja prima cijenu.
- Ako je cijena NULL, vratite nazive i cijene svih proizvoda iz tablice Proizvod.
- Ako nije, vratite nazive i cijene samo onih proizvoda čija cijena je veća od zadane cijene.
- Iskoristite funkciju s NULL i s cijenom od 3000*/
- CREATE FUNCTION F4
- (
- @Cijena money
- )
- RETURNS @rez TABLE ( Naziv nvarchar(50), Cijena money )
- AS
- BEGIN
- IF @Cijena IS NULL BEGIN
- INSERT INTO @rez (Naziv, Cijena)
- SELECT Naziv, CijenaBezPDV FROM Proizvod
- END
- ELSE BEGIN
- INSERT INTO @rez (Naziv, Cijena)
- SELECT Naziv, CijenaBezPDV FROM Proizvod WHERE CijenaBezPDV > @Cijena
- END
- RETURN
- END
- GO
- SELECT * FROM F4(NULL)
- SELECT * FROM F4(3000)
- drop function f4
- /* Dohvatite naziv i cijene svih proizvoda.
- Za cijene koje su ispod 1000, napišite “Jeftino”, između 1000 i 2000
- napišite “Prihvatljivo”, za sve ostale napišite “Skupo”. */
- SELECT
- Naziv,
- CASE
- WHEN CijenaBezPDV < 1000 THEN 'Jeftino'
- WHEN CijenaBezPDV BETWEEN 1000 AND 2000 THEN 'Prihvatljivo'
- ELSE 'Skupo'
- END AS Procjena
- FROM Proizvod
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement