Szkolenie SQL Kraków dzień 3 C

select imie, nazwisko , kraj from zawodnicy
where kraj = 'pol'

create view polacy_tl as 
	select imie, nazwisko , kraj from zawodnicy
	where kraj = 'pol'


select * from polacy_tl

insert into polacy_tl 
(imie, nazwisko,kraj) values ('jan','kowalski','pol')

select * from zawodnicy

drop view polacy_tl

with polacy2_tl (imie, nazwisko, kraj) as 
 (select imie, nazwisko, kraj from zawodnicy
  where kraj ='pol')

select * from polacy2_tl
	



declare @napis varchar(50)
set @napis = 'pol'
--select @napis

 select imie, nazwisko, @napis
 from zawodnicy
 where kraj = @napis


 declare @tekst varchar(max)
 set @tekst = ''
 select @tekst = @tekst+imie from zawodnicy
 select @tekst

 -- Wypisz w jednej komórce wszystkie nazwy 
 -- krajów oddzielone spacją, bez powtórzeń 
 
 declare @kraj varchar(max)
 set @kraj = ''
   select @kraj = @kraj + kraj + ' ' from
	 (select distinct kraj from zawodnicy) t
select @kraj

-- tworzenie własnych funkcji 

create function dodawanie_tl(@liczbaA int, @liczbaB int) returns int 
as
begin
	declare @wynik int
	set @wynik = @liczbaA + @liczbaB
	return @wynik
end

select dbo.dodawanie_tl(3,4)

select imie, nazwisko, dbo.dodawanie_tl(wzrost,waga) suma
from zawodnicy


create function bmi_tl(@waga decimal(10,2), @wzrost decimal(10,2)) returns decimal(10,2) 
as
begin
	declare @wynik decimal(10,2)
	set @wynik =  @waga / POWER(@wzrost/100,2) 
	return @wynik
end
drop function bmi_tl

select imie, nazwisko, dbo.bmi_tl(waga,wzrost)
from zawodnicy


-- stwórz nową funkcję, która na podstawie zadanego na 
-- wejsciu id_zawodnika wypisze nazwisko jego trenera 
go;

create function jegoTrener_tl(@id int) returns varchar(255)
as
begin
	declare @nazwisko varchar(255)
	
	select @nazwisko= nazwisko_t
	from zawodnicy z join trenerzy t on z.id_trenera=t.id_trenera
	where id_zawodnika = @id

	return @nazwisko
end
go
select  imie, nazwisko, dbo.jegoTrener_tl(id_zawodnika)
from zawodnicy

-- napisz funkcje jegoZawodnicy , ktora na wejsciu oczekuje id_trenera i zwraca 
-- typ varchar(255), który reprezentuje nazwiska jego zawodnikow , oodzielone przecinkiem 

 create function jegoZawodnicy(@id int) returns varchar(max)
 as 
 begin

	declare @nazwiska varchar(255)
	set @nazwiska = ''
	select @nazwiska=@nazwiska + ', ' + nazwisko
	from zawodnicy z join trenerzy t on t.id_trenera = z.id_trenera
	where t.id_trenera = @id
	return substring(@nazwiska,3,len(@nazwiska))
 end

 drop function jegoZawodnicy
 select imie_t, nazwisko_t, dbo.jegoZawodnicy(id_trenera)
 from trenerzy

 select SUBSTRING('ala ma kota',5,1000)

 -- pętle 

 declare @i int
 set @i = 1

 while @i < 10 
 begin 
	--select @i
	insert into zawodnicy_tl (imie, nazwisko) 
		values ('jan','kowalski'+convert(varchar,@i))
	set @i+=1  --@i=@i+1
 end

 select * from zawodnicy_tl

 -- dla kazdego zawodnika wypisz ile razy startował w zawodach stosujac znaki + 
 -- czyli jezeli zawodnik startowal w zawodach 4 razy to w kolumnie starty
 -- wypisze ++++
     -- jezeli startowal 6 razy to wypisze ++++++  itd....
	 -- stwórz do tego funkcję o nazwie plusiki, ktora na wejsciu 
	 -- otrzymuje id_zawodnika i zwraca tyle plusikow ile trzeba 

create function plusiki_tl(@id int) returns varchar(max)
as
begin
	declare @ileRazyStartowal int
	select @ileRazyStartowal= count(U.id_zawodow)
	from zawodnicy z left join uczestnictwa u on z.id_zawodnika = u.id_zawodnika
	where z.id_zawodnika=@id
	GROUP BY z.id_zawodnika   
	declare @plusiki varchar(max)
	set @plusiki = ''
	declare @i int
	set @i=0
	while @i<@ileRazyStartowal
	begin
		set @plusiki+='+'
		set @i+=1
	end
	return @plusiki
end 

select imie, nazwisko, dbo.plusiki_tl(id_zawodnika)
from zawodnicy


	 update zawodnicy set imie = 'x' where id_zawodnika = 1