• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie z SQL, procedury

VPS Starter Arubacloud
0 głosów
557 wizyt
pytanie zadane 26 listopada 2016 w Rozwój zawodowy, nauka, praca przez Jiin Obywatel (1,390 p.)
Witam, mam takie oto zadanie:
 https://wklej.to/rkP1N

Nie jest ono co prawda moje ale obiecałem pomóc i teraz nie mam pojęcia jak się za to zabrać, tzn. jak poprawnie zdefiniować procedury, wgl jak zapisać zapytania w nich. Mógłby mi ktoś pomóc? Byłbym bardzo wdzięczny. Próbowałem już nawet zapisać jako plik .sql i wrzucić do PhpMyAdmin po czym zrobić sobie kwerendę i polecenia które mi wyskoczą wrzucić do SSMS, ale odrazu wyrzuca mi syntax error. Używana wersja SQL server to 2014.

1 odpowiedź

+1 głos
odpowiedź 26 listopada 2016 przez jeremus Maniak (59,720 p.)
--- poniżej przykład dla pierwszy wolny termin
create procedure wolny_termin  @lekarz_nazw as varchar(50),@lekarz_imie as varchar(50)
as
begin
   select top 1 l.nazwisko,l.imie,cast(t.odgodziny as date) as data,format(t.odgodziny,'hh:mm') as czas,g.nazwa as nazwa_gabinetu from terminy t,lekarze l,gabinety g
   where l.nazwisko=@lekarz_nazw and l.imie=@lekarz_imie
         and t.idlekarza=l.id and t.idgabinetu=g.id 
--- ten warunek do usuniecia lub nie w zaleznosci co autor bazy mial na mysli w tab.terminy,wizyty
--		 and t.id not in ( select idterminu from wizyty)
		 order by t.odgodziny
end


go

--- wykonanie procedury

exec  wolny_termin 'Konrad',  'Marek'

-- wynik

nazwisko    imie    data    czas    nazwa_gabinetu
Konrad    Marek    2016-01-05    12:00    9

 

 

komentarz 28 listopada 2016 przez Jiin Obywatel (1,390 p.)

Okej, zrobiłem sobie na podstawie tej procedury drugą,

  create procedure obsluzeni  @od as varchar(50), @do as varchar(50)
as
begin
   select COUNT(*)
    FROM wizyty w, stany s
    WHERE (w.godzina BETWEEN @od and @do)  and s.stan = 'z' 
end
 go

 

Ale przy trzeciej gdzie mam znaleźć lekarza który przyjął najwięcej osób wyrzuca mi już błąd:

 create procedure najlepszy_lekarz  @od as varchar(50), @do as varchar(50)
as
begin

SELECT *, COUNT(*) AS total FROM wizyty w, stany s, terminy t
WHERE (w.godzina BETWEEN @od and @do)  and s.stan = 'z' 
 GROUP BY t.idlekarza ORDER BY total DESC LIMIT 1

 
end
 go

 

Mógłby ktoś pomóc jak wyciągnąc id lekarza z największą liczbą obsłużonych wizyt?

komentarz 28 listopada 2016 przez jeremus Maniak (59,720 p.)
create procedure best_lekarz  @miesiac as int, @rok as int
as
begin
   select  l.nazwisko+' '+l.imie,count(*) as ile_wizyt 
   from terminy t,lekarze l,wizyty w
   where year(w.godzina)=@rok and month(w.godzina)=@miesiac
         and t.idlekarza=l.id and t.id=w.idterminu
		 group by l.nazwisko+' '+l.imie
		 order by count(*) desc
end


go


--- wywolanie

exec best_lekarz 1 , 2016

--- wynik

(No column name)    ile_wizyt
Herbut Igor    2
Słowacki Juliusz    2
Bosy Karol    2
Chrząszcz Zbigniew    1
Szymborska Wisława    1
Tuwim Julian    1
Waldowski Harry    1
Konrad Marek    1
Kowalski Paweł    1
Miłosz Czesław    1

Podobne pytania

–1 głos
1 odpowiedź 545 wizyt
pytanie zadane 26 kwietnia 2017 w SQL, bazy danych przez Ugari Nowicjusz (200 p.)
0 głosów
1 odpowiedź 2,116 wizyt
pytanie zadane 3 grudnia 2017 w Systemy operacyjne, programy przez rarituto Nowicjusz (150 p.)
+1 głos
1 odpowiedź 198 wizyt

92,782 zapytań

141,712 odpowiedzi

320,599 komentarzy

62,114 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...