Zapytanie do bazy danych

0

Czesc panie i panowie mam problem zapytaniem do bazy danych której struktura wyglada w taki sposób:

Tabela Wizyty ( IdWizyty, IdLekarza, IdPacjenta, DataWizyty, Oplata)

**Tabela Pacjenci ** (IdPacjenta, Nazwisko, Imie, Pesel, DataUrodzenia, Plec)

**Tabela Lekarze **(IdLekarza, Nazwisko, Imie , DataUrodzenia, NIP, Plec, IdSpecjalizacji)

Tabela Specjalizacje (IdSpecjalizacji, NazwaSpecjalizacji)

Zadanie brzmi:
napisać zapytanie, które zwróci dane pacjentek urodzonych po roku 1998; nazwisko, imię i pesel, które w roku 2009 miały przynajmniej trzy wizyty u lekarza rodzinnego i przynajmniej 3 wizyty u innych specjalistów

oto moj kod

use DataBase
;WITH TMP as
(

select P.Nazwisko,P.Imie,P.Pesel,L.Idspecjalizacji,count(*) as ileWizyt
from Wizyty as W
inner join Pacjenci as P on W.IdPacjenta=P.IdPacjenta
inner join Lekarze as L on W.IdLekarza=L.IdLekarza
where
year (DataWizyty)=2013  and    P.CzyKobieta=1 and P.DataUrodzenia>'1965' and L.Idspecjalizacji='1' 
group by P.Nazwisko,P.Imie,Pesel,Idspecjalizacji

)

Select * 
from TMP
where ileWizyt>3

Tym kodem wyswietlam wiecej niz 3 wizyty u lekarza rodzinnego czyli L.Idspecjalizacji='1' , Jak jednoczesnie wyswietlic pacjentow z ponad 3 wizytami u innych specjalistow?

0

use ABDPrzychodnia
;WITH TMP as
(

select P.Nazwisko,P.Imie,P.Pesel,L.Idspecjalizacji,count(*) as ileWizyt
from Wizyty as W
inner join Pacjenci as P on W.IdPacjenta=P.IdPacjenta
inner join Lekarze as L on W.IdLekarza=L.IdLekarza
where
year (DataWizyty)=2013  and    P.CzyKobieta=1 and P.DataUrodzenia>'1965' and (L.Idspecjalizacji='1' or L.Idspecjalizacji='2' 

or L.Idspecjalizacji='3'
or L.Idspecjalizacji='4'
or L.Idspecjalizacji='5'
or L.Idspecjalizacji='6'
or L.Idspecjalizacji='7'
or L.Idspecjalizacji='8'
or L.Idspecjalizacji='9'
or L.Idspecjalizacji='10'
or L.Idspecjalizacji='2134')


group by P.Nazwisko,P.Imie,Pesel,Idspecjalizacji

)

Select * 
from TMP
where ileWizyt>3

Wymyslilem co takiego aby wyszukiwal specjalistow po oddzielnym IdSpecjalizacji , czy istnieje inna metoda?

1

Np tak:


use DataBase
;WITH TMP as
(

select P.Nazwisko,P.Imie,P.Pesel,L.Idspecjalizacji
,SUM(CASE WHEN L.Idspecjalizacji = 1 THEN 1 ELSE 0 END) as ileWizytRodzinny
,SUM(CASE WHEN L.Idspecjalizacji <> 1 THEN 1 ELSE 0 END) as ileWizytInnySpec
from Wizyty as W
inner join Pacjenci as P on W.IdPacjenta=P.IdPacjenta
inner join Lekarze as L on W.IdLekarza=L.IdLekarza
where
year (DataWizyty)=2013  and    P.CzyKobieta=1 and P.DataUrodzenia>'1965'
group by P.Nazwisko,P.Imie,Pesel,Idspecjalizacji

)

Select * 
from TMP
where ileWizytRodzinny >3 AND ileWizytInnySpec > 3

1 użytkowników online, w tym zalogowanych: 0, gości: 1