use Sezam
go
--01
select Imie, Nazwisko
from tblPracownicy
--02
select NazwaTowaru, CenaZadana
from tblTowary
--03
select NazwaTowaru, CenaZadana
from tblTowary
order by NazwaTowaru
--04
select NazwaTowaru, CenaZadana
from tblTowary
order by CenaZadana desc
--05
select top 10 *
from tblTowary
--06
/****** Script for SelectTopNRows command from SSMS ******/
SELECT TOP 1000 [KodTowaru]
,[Kategoria]
,[NazwaTowaru]
,[Cena]
,[CenaZadana]
FROM [Sezam].[dbo].[tblTowary]
SELECT [KodTowaru]
,[Kategoria]
,[NazwaTowaru]
,[Cena]
,[CenaZadana]
FROM [dbo].[tblTowary]
--06
select Imie, Nazwisko, Miasto
from tblPracownicy
where Miasto = 'warszawa'
--07
select NazwaFirmy, Miasto
from tblKlienci
where Miasto = 'warszawa' or Miasto = 'zielonka'
--where Miasto in ('warszawa', 'zielonka')
--08
select NazwaFirmy, Miasto
from tblKlienci
--where Miasto = 'warszawa' or Miasto = 'zielonka'
where Miasto in ('warszawa', 'zielonka')
--09
select NazwaFirmy, Miasto
from tblKlienci
where Miasto in (Select Miasto from tblPracownicy)
--10
select Imie, Nazwisko, Miasto
from tblPracownicy
where Nazwisko like 'k%'
--11
select Imie, Nazwisko, Miasto
from tblPracownicy
where Nazwisko like '_o%'
--12
select Imie, Nazwisko, Miasto
from tblPracownicy
where Nazwisko like '[a-k, w]%'
order by Nazwisko
--13
select NazwaTowaru, CenaZadana
from tblTowary
where CenaZadana >= 5 and CenaZadana <=10
order by CenaZadana desc
--14
select NazwaTowaru, CenaZadana
from tblTowary
where CenaZadana between 5 and 10
order by CenaZadana desc
--15
select NazwaFirmy, TelefonKomorkowy
from tblKlienci
where TelefonKomorkowy is null
select NazwaFirmy, TelefonKomorkowy
from tblKlienci
where TelefonKomorkowy is not null
--16
select GETDATE()
select GETDATE() + 0.25
--17 anubhavg
select convert (varchar,getdate(),121)
--18
select min(DataSprzedazy) as mini, max(DataSprzedazy) as maxi
from tblSprzedaz
--19
select NrSprzedazy, DataSprzedazy
from tblSprzedaz
where DataSprzedazy >='1998-02-01' and DataSprzedazy <='1998-03-31'
order by DataSprzedazy
select NrSprzedazy, DataSprzedazy
from tblSprzedaz
where DataSprzedazy between '1998-02-01' and '1998-03-31'
order by DataSprzedazy
--20
select DataSprzedazy
, DATEPART(yyyy, DataSprzedazy) as Rok
, DATEPART(q, DataSprzedazy) as Kwartal
, DATEPART(m, DataSprzedazy) as Miesiac
, DATEPART(ww, DataSprzedazy) as Tydzien
, DATEPART(y, DataSprzedazy) as DzienRoku
, DATEPART(d, DataSprzedazy) as DzienMiesiaca
, DATEPART(w, DataSprzedazy) as DzienTygodnia
from tblSprzedaz
select datepart(w, getdate()) as DzienTygodnia
--21
select Imie + ' ' + Nazwisko as Pracownik
from tblPracownicy
order by Nazwisko
--22 Cwiczenie
select concat('Wykonano ', GETDATE())
select 'wykonano : ' + cast(getdate() as varchar)
--23
select Pracownik from
(select
case
when imie not like '%a'
then 'Pan '
--else 'Pan '
end + Imie + ' ' + Nazwisko as Pracownik
from tblPracownicy) as TAB
where TAB.Pracownik is not null
--24
select distinct Miasto
from tblKlienci
select Miasto
from tblKlienci
group by Miasto
--25
select Miasto
from tblKlienci
union
select Miasto
from tblPracownicy
--26
select Miasto
from tblKlienci
union all
select Miasto
from tblPracownicy
--27
select Miasto
from tblKlienci
except
select Miasto
from tblPracownicy
--28
select Miasto
from tblKlienci
intersect
select Miasto
from tblPracownicy
-- funkcje tekstowe
--29
select ltrim(NazwaTowaru) as Towar, CenaZadana
from tblTowary
order by Towar
--30
select LEFT(Nazwisko,3) as NAZ
from tblPracownicy
--31
select RIGHT(Nazwisko,3) as NAZ
from tblPracownicy
--32
select substring(Nazwisko,0,3) as NAZ
from tblPracownicy
--33
select len(Nazwisko) as NAZ, Nazwisko
from tblPracownicy
--34
select upper(Nazwisko) as NAZ, Nazwisko
from tblPracownicy
--35
select lower(Nazwisko) as NAZ, Nazwisko
from tblPracownicy
--36
select concat(upper(left(Nazwisko,1)), lower(substring(Nazwisko,2,LEN(Nazwisko)-1))) as GoodNazwisko, Nazwisko as BadNazwisko
from tblPracownicy
select imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1)) as GoodNazwisko, Nazwisko as BadNazwisko
from tblPracownicy
--funkcje agregujące: group by, having, join
--37
select cast(sum(Ilosc * CenaSprzedazy) as money)
from tblOpisSprzedazy
select cast(sum(Ilosc * CenaSprzedazy) as decimal(10,2)) as CalaKasa
from tblOpisSprzedazy
--38 Ranking faktur (sprzedaży)
select NrSprzedazy, cast(sum(Ilosc * CenaSprzedazy) as decimal(10,2)) as CalaKasa
from tblOpisSprzedazy
Group by NrSprzedazy
order by CalaKasa desc
--39 Ranking towarów(sprzedaży)
select ltrim(NazwaTowaru) as Towar
, cast(sum(Ilosc * CenaSprzedazy) as decimal(10,2)) as CalaKasa
from tblTowary
inner join tblOpisSprzedazy on tblTowary.KodTowaru = tblOpisSprzedazy.KodTowaru
group by NazwaTowaru
order by CalaKasa desc
--40 Ranking towarów(sprzedaży)
select
cast(sum(Ilosc * CenaSprzedazy) as decimal(10,2)) as CalaKasa
, NazwaKategorii
from tblTowary
inner join tblOpisSprzedazy on tblTowary.KodTowaru = tblOpisSprzedazy.KodTowaru
inner join tblKategorie on tblTowary.Kategoria = tblKategorie.Kategoria
group by NazwaKategorii
order by CalaKasa desc
--41
SELECT
imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1)) as Pracownik
, cast(sum(Ilosc * CenaSprzedazy) as decimal(10,2)) as CalaKasa
FROM tblPracownicy INNER JOIN
tblSprzedaz ON tblPracownicy.IDPracownika = tblSprzedaz.IDPracownika INNER JOIN
tblOpisSprzedazy ON tblSprzedaz.NrSprzedazy = tblOpisSprzedazy.NrSprzedazy
group by imie, nazwisko
order by CalaKasa desc
SELECT
imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1)) as Pracownik
, format(sum(Ilosc * CenaSprzedazy), 'N', 'en-us' ) as CalaKasa
FROM tblPracownicy INNER JOIN
tblSprzedaz ON tblPracownicy.IDPracownika = tblSprzedaz.IDPracownika INNER JOIN
tblOpisSprzedazy ON tblSprzedaz.NrSprzedazy = tblOpisSprzedazy.NrSprzedazy
group by imie, nazwisko
order by CalaKasa desc
--42
SELECT NazwaFirmy
, cast(sum(Ilosc * CenaSprzedazy) as decimal(10,2)) as CalaKasa
FROM tblKlienci INNER JOIN
tblSprzedaz ON tblKlienci.KodKlienta = tblSprzedaz.KodKlienta INNER JOIN
tblOpisSprzedazy ON tblSprzedaz.NrSprzedazy = tblOpisSprzedazy.NrSprzedazy
group by NazwaFirmy
order by CalaKasa desc
--43 Ranking pracowników (wzorzec select)
SELECT
DATEPART(yyyy, DataSprzedazy) as Rok
, DATEPART(q, DataSprzedazy) as Kwartal
, imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1)) as Pracownik
, cast(sum(Ilosc * CenaSprzedazy) as decimal(10,2)) as CalaKasa
FROM tblPracownicy INNER JOIN
tblSprzedaz ON tblPracownicy.IDPracownika = tblSprzedaz.IDPracownika INNER JOIN
tblOpisSprzedazy ON tblSprzedaz.NrSprzedazy = tblOpisSprzedazy.NrSprzedazy
where DATEPART(yyyy, DataSprzedazy) = 1998 and DATEPART(q, DataSprzedazy) = 1
group by imie, nazwisko, DATEPART(yyyy, DataSprzedazy), DATEPART(q, DataSprzedazy)
having sum(Ilosc * CenaSprzedazy) >= 3000
order by CalaKasa desc
--44 ktore zysk kwartal po kwartale obrot i zysk, rok, kwaral, obrot i zysk
SELECT
DATEPART(yyyy, DataSprzedazy) as Rok
, DATEPART(q, DataSprzedazy) as Kwartal
, cast(sum(Ilosc * CenaSprzedazy) as decimal(10,2)) as CalaKasa
, cast(sum(Ilosc * (CenaSprzedazy- Cena)) as decimal(10,2)) as Zysk
FROM tblSprzedaz INNER JOIN
tblOpisSprzedazy ON tblSprzedaz.NrSprzedazy = tblOpisSprzedazy.NrSprzedazy INNER JOIN
tblTowary ON tblOpisSprzedazy.KodTowaru = tblTowary.KodTowaru
group by DATEPART(yyyy, DataSprzedazy), DATEPART(q, DataSprzedazy)
order by rok, Kwartal
--45 Liczebność FVAT pracownika
SELECT (Imie + ' ' + Nazwisko) as ImieNazwisko, count(NrSprzedazy) as CountNrSprzedazy
FROM tblPracownicy INNER JOIN
tblSprzedaz ON tblPracownicy.IDPracownika = tblSprzedaz.IDPracownika
group by Imie + ' ' + Nazwisko
order by count(NrSprzedazy) desc
--46 Liczebność czegoś pracownika
SELECT Imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1)) as ImieNazwisko
, count(tblSprzedaz.NrSprzedazy) as CountPozycjiFaktur
FROM tblPracownicy INNER JOIN
tblSprzedaz ON tblPracownicy.IDPracownika = tblSprzedaz.IDPracownika
INNER JOIN tblOpisSprzedazy ON tblOpisSprzedazy.NrSprzedazy = tblSprzedaz.NrSprzedazy
group by Imie, Nazwisko
order by CountPozycjiFaktur desc
--47 Średnia z pozycji FVAT Pracownika
SELECT Imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1)) as ImieNazwisko
, cast(avg(Ilosc * CenaSprzedazy) as decimal(10,2)) as SredniaWartoscPozycjiFaktury
FROM tblPracownicy INNER JOIN
tblSprzedaz ON tblPracownicy.IDPracownika = tblSprzedaz.IDPracownika
INNER JOIN tblOpisSprzedazy ON tblOpisSprzedazy.NrSprzedazy = tblSprzedaz.NrSprzedazy
group by Imie, Nazwisko
order by SredniaWartoscPozycjiFaktury desc
--48 Max z wartości FVAT Pracownika
SELECT Imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1)) as ImieNazwisko
, cast(Max(Ilosc * CenaSprzedazy) as decimal(10,2)) as MaxWartoscPozycjiFaktury
FROM tblPracownicy INNER JOIN
tblSprzedaz ON tblPracownicy.IDPracownika = tblSprzedaz.IDPracownika
INNER JOIN tblOpisSprzedazy ON tblOpisSprzedazy.NrSprzedazy = tblSprzedaz.NrSprzedazy
group by Imie, Nazwisko
order by MaxWartoscPozycjiFaktury desc
--49 Min z wartości FVAT Pracownika
SELECT Imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1)) as ImieNazwisko
, cast(Min(Ilosc * CenaSprzedazy) as decimal(10,2)) as MinWartoscPozycjiFaktury
FROM tblPracownicy INNER JOIN
tblSprzedaz ON tblPracownicy.IDPracownika = tblSprzedaz.IDPracownika
INNER JOIN tblOpisSprzedazy ON tblOpisSprzedazy.NrSprzedazy = tblSprzedaz.NrSprzedazy
group by Imie, Nazwisko
order by MinWartoscPozycjiFaktury desc
--50 z udziałem procentowym (podselect)
SELECT NazwaFirmy
, cast(sum(Ilosc * CenaSprzedazy) / (select sum(Ilosc * CenaSprzedazy)
from tblOpisSprzedazy)*100 as decimal(10,2) ) as CalaKasa
FROM tblKlienci INNER JOIN
tblSprzedaz ON tblKlienci.KodKlienta = tblSprzedaz.KodKlienta INNER JOIN
tblOpisSprzedazy ON tblSprzedaz.NrSprzedazy = tblOpisSprzedazy.NrSprzedazy
group by NazwaFirmy
order by CalaKasa desc
--51 z udziałem procentowym (Common Table Expressions)
WITH cte as (
select cast(sum(Ilosc * CenaSprzedazy) as money) as CalaKasa from tblOpisSprzedazy
)
SELECT NazwaFirmy
, cast(sum(Ilosc * CenaSprzedazy) as decimal(10,2)) as TotalKasa
, CalaKasa, cast(sum(Ilosc * CenaSprzedazy)/ CalaKasa as money)*100 as Procent
FROM tblKlienci INNER JOIN
tblSprzedaz ON tblKlienci.KodKlienta = tblSprzedaz.KodKlienta INNER JOIN
tblOpisSprzedazy ON tblSprzedaz.NrSprzedazy = tblOpisSprzedazy.NrSprzedazy
CROSS JOIN CTE
group by NazwaFirmy, CalaKasa
order by Procent desc
--52 średnia liczba pozycji faktur na fakturze wg pracownika
WITH cte1 as (
SELECT Imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1)) as ImieNazwisko
, count(NrSprzedazy) as CountNrSprzedazy
FROM tblPracownicy INNER JOIN
tblSprzedaz ON tblPracownicy.IDPracownika = tblSprzedaz.IDPracownika
group by Imie, Nazwisko
--order by count(NrSprzedazy) desc
)
,cte2 as (
SELECT Imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1)) as ImieNazwisko
, count(tblSprzedaz.NrSprzedazy) as CountPozycjiFaktur
FROM tblPracownicy INNER JOIN
tblSprzedaz ON tblPracownicy.IDPracownika = tblSprzedaz.IDPracownika
INNER JOIN tblOpisSprzedazy ON tblOpisSprzedazy.NrSprzedazy = tblSprzedaz.NrSprzedazy
group by Imie, Nazwisko
--order by CountPozycjiFaktur desc
)
SELECT cte1.ImieNazwisko, CountNrSprzedazy, CountPozycjiFaktur, cast(cast(CountPozycjiFaktur as decimal(10,3))/ cast(CountNrSprzedazy as decimal(10,3 )) as decimal(10,3)) as Procent
FROM cte1 inner join cte2
ON cte1.ImieNazwisko = cte2.ImieNazwisko
order by Procent desc
--53 średnia wartość z faktury
WITH CTE1 AS (
SELECT
imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1)) as Pracownik
, cast(sum(Ilosc * CenaSprzedazy) as decimal(10,2)) as CalaKasa
FROM tblPracownicy INNER JOIN
tblSprzedaz ON tblPracownicy.IDPracownika = tblSprzedaz.IDPracownika INNER JOIN
tblOpisSprzedazy ON tblSprzedaz.NrSprzedazy = tblOpisSprzedazy.NrSprzedazy
group by imie, nazwisko
--order by CalaKasa desc
)
, CTE2 AS
(
SELECT imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1)) as Pracownik
, count(NrSprzedazy) as CountNrSprzedazy
FROM tblPracownicy INNER JOIN
tblSprzedaz ON tblPracownicy.IDPracownika = tblSprzedaz.IDPracownika
group by Imie, Nazwisko
--order by count(NrSprzedazy) desc
)
SELECT cte1.Pracownik, CTE1 .CalaKasa, CTE2.CountNrSprzedazy, CAST(CTE1.CalaKasa/CTE2.CountNrSprzedazy AS MONEY) AS AVERAGE
FROM CTE1 INNER JOIN CTE2
ON CTE1.Pracownik = CTE2.Pracownik
ORDER by AVERAGE desc
--54 Widok - Zysk wg Rok, Kwartał
GO
CREATE VIEW vRokKwartalObrotZysk AS
SELECT TOP 99.999 percent
DATEPART(yyyy, DataSprzedazy) as Rok
, DATEPART(q, DataSprzedazy) as Kwartal
, cast(sum(Ilosc * CenaSprzedazy) as decimal(10,2)) as CalaKasa
, cast(sum(Ilosc * (CenaSprzedazy- Cena)) as decimal(10,2)) as Zysk
FROM tblSprzedaz INNER JOIN
tblOpisSprzedazy ON tblSprzedaz.NrSprzedazy = tblOpisSprzedazy.NrSprzedazy INNER JOIN
tblTowary ON tblOpisSprzedazy.KodTowaru = tblTowary.KodTowaru
GROUP BY DATEPART(yyyy, DataSprzedazy), DATEPART(q, DataSprzedazy)
--order by rok, Kwartal
GO
SELECT * FROM vRokKwartalObrotZysk
--55 Duży widok dla analityków (namiastka bazy raportowej)
GO
--CREATE VIEW vBazaRaportowa AS
ALTER VIEW vBazaRaportowa AS
SELECT NazwaFirmy
, tblKlienci.Miasto AS MiastaKlienta
, imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1)) as Pracownik
, tblPracownicy.Miasto as MiastoPracownika
, tblPracownicy.Stanowisko
, tblSprzedaz.NrSprzedazy
, CAST(DataSprzedazy AS date) AS DataSprzedazy
, DATEPART(yyyy, DataSprzedazy) as Rok
, DATEPART(q, DataSprzedazy) as Kwartal
, DATEPART(m, DataSprzedazy) as Miesiac
, DATEPART(ISO_WEEK, DataSprzedazy) as TydzienISO
, CASE
WHEN DATEPART(w, DataSprzedazy) = 1 THEN 'Niedziela'
WHEN DATEPART(w, DataSprzedazy) = 2 THEN 'Poniedziałek'
WHEN DATEPART(w, DataSprzedazy) = 3 THEN 'Wtorek'
WHEN DATEPART(w, DataSprzedazy) = 4 THEN 'Środa'
WHEN DATEPART(w, DataSprzedazy) = 5 THEN 'Czwartek'
WHEN DATEPART(w, DataSprzedazy) = 6 THEN 'Piątek'
ELSE 'Sobota'
END AS DzienTygodnia
, Ilosc
, CAST(Ilosc * CenaSprzedazy AS decimal(10,2)) AS Wartosc
, CAST(Ilosc * (CenaSprzedazy - Cena) AS decimal(10,2)) AS Zysk
, ltrim(NazwaTowaru) AS Towar
, NazwaKategorii
FROM tblSprzedaz INNER JOIN
tblKlienci ON tblSprzedaz.KodKlienta = tblKlienci.KodKlienta INNER JOIN
tblOpisSprzedazy ON tblSprzedaz.NrSprzedazy = tblOpisSprzedazy.NrSprzedazy INNER JOIN
tblPracownicy ON tblSprzedaz.IDPracownika = tblPracownicy.IDPracownika INNER JOIN
tblTowary ON tblOpisSprzedazy.KodTowaru = tblTowary.KodTowaru INNER JOIN
tblKategorie ON tblTowary.Kategoria = tblKategorie.Kategoria
GO
SELECT * from vBazaRaportowa
--56 Procedura - Ranking pracowników za Rok. Kwartał, Obrót Minimalny
GO
CREATE PROCEDURE pRankingPracownikow_Rok_Kwartal_ObrotMin
@Rok int, @Kwartal int, @ObrotMin as money
AS
SELECT
DATEPART(yyyy, DataSprzedazy) as Rok
, DATEPART(q, DataSprzedazy) as Kwartal
, imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1)) as Pracownik
, cast(sum(Ilosc * CenaSprzedazy) as decimal(10,2)) as CalaKasa
FROM tblPracownicy INNER JOIN
tblSprzedaz ON tblPracownicy.IDPracownika = tblSprzedaz.IDPracownika INNER JOIN
tblOpisSprzedazy ON tblSprzedaz.NrSprzedazy = tblOpisSprzedazy.NrSprzedazy
where DATEPART(yyyy, DataSprzedazy) = @Rok and DATEPART(q, DataSprzedazy) = @Kwartal
group by imie, nazwisko, DATEPART(yyyy, DataSprzedazy), DATEPART(q, DataSprzedazy)
having sum(Ilosc * CenaSprzedazy) >= @ObrotMin
order by CalaKasa desc
GO
EXEC pRankingPracownikow_Rok_Kwartal_ObrotMin 1998,2, 1000
--57 procesura - zmiana cen kategorii towaru
SELECT LTRIM(NazwaTowaru) AS Towar, CAST(CenaZadana AS decimal(10,2)) AS CenaZadana
FROM tblTowary
WHERE Kategoria = 2
GO
CREATE PROCEDURE pZmianaCenKategoriiTowaru
@Zmiana float, @Kategoria int
AS
UPDATE tblTowary set CenaZadana = CenaZadana * @Zmiana where Kategoria = @Kategoria
GO
EXEC pZmianaCenKategoriiTowaru 0.952380,2
SELECT 1/1.05
SELECT * FROM tblTowary WHERE Kategoria = 2
--58 lista towarów z przedziału CenaOd, CenaDo (posortowana po cenie)
SELECT * FROM tblTowary
GO
--CREATE PROCEDURE pPrzedzialCenowy
ALTER PROCEDURE pPrzedzialCenowy
@CenaOd money, @CenaDo money
AS
SELECT LTRIM(NazwaTowaru) AS LadnyTowar, CAST(CenaZadana AS decimal(10,2)) AS Cena
FROM tblTowary
WHERE CenaZadana BETWEEN @CenaOd AND @CenaDo
ORDER BY CenaZadana DESC
GO
EXEC pPrzedzialCenowy 3.50, 8.5
-- 59 Dopisz kategorię
SELECT * FROM tblKategorie
INSERT INTO [dbo].[tblKategorie]
([Kategoria]
,[NazwaKategorii])
VALUES
(8
,'Pozostałe')
DELETE FROM [dbo].[tblKategorie]
WHERE [Kategoria] = 8
--60 7-miu wspaniałych pracowników - mistrzów kategorii towarowej
WITH CTE AS
(
SELECT RANK() OVER(PARTITION BY tblKategorie.Kategoria ORDER BY SUM(Ilosc * CenaSprzedazy) DESC) AS Pozycja
, NazwaKategorii
, imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1)) as Pracownik
, cast(sum(Ilosc * CenaSprzedazy) as decimal(10,2)) as CalaKasa
FROM tblSprzedaz INNER JOIN
tblKlienci ON tblSprzedaz.KodKlienta = tblKlienci.KodKlienta INNER JOIN
tblOpisSprzedazy ON tblSprzedaz.NrSprzedazy = tblOpisSprzedazy.NrSprzedazy INNER JOIN
tblPracownicy ON tblSprzedaz.IDPracownika = tblPracownicy.IDPracownika INNER JOIN
tblTowary ON tblOpisSprzedazy.KodTowaru = tblTowary.KodTowaru INNER JOIN
tblKategorie ON tblTowary.Kategoria = tblKategorie.Kategoria
GROUP BY NazwaKategorii, tblkategorie.Kategoria, imie + ' ' + upper(left(Nazwisko,1)) + lower(substring(Nazwisko,2,LEN(Nazwisko)-1))
)
SELECT * FROM CTE
WHERE Pozycja = 1
ORDER BY CalaKasa DESC