Sql server utworzenie zapytania do dwóch tabel

0

Witam,

Mam problem z utworzeniem zapytania do dwoch tabel (SQL SERVER)

Create 5able Osoby

id_pola PK int identity(1,1) Primary key,

imie varchar(20),

nazwisko varchar(20),

Pesel int


Freate table GodzinyPracy

id_pole int identity(1,1)

id_osoby int foreign key Osoby(id_pole),

Data data,

LiczbaGodzin int

Przypuśćmy, ze mam już utworzone i wypełnione tabele i chciałbym utworzyć zapytanie, w wyniku którego otrzymam wydruk, ile w sumie godzin każda osoba, była w pracy z podziałem na dni tygodnia z nazwą danego dnia.

Proóbowałem coś takiego:

select Imie, Datename(Data_obecosci_w_pracy,DATEADD(WEEKDAY,90, GetDate())) from Osoby o left join GodzinyPracy g on(o.Id_pole = g.Id_osoby)

0

a jak ktoś pracował od 22:00 01.01.2017 do 06:00 02.01.2017 to jak będzie wpis wyglądał w GodzinyPracy i jaki ma być wynik dla dnia 01.01 i 02.01?

0
Pijany Terrorysta napisał(a):

Witam,

Mam problem z utworzeniem zapytania do dwoch tabel (SQL SERVER)

Create 5able Osoby
id_pola PK int identity(1,1) Primary key,
imie varchar(20),
nazwisko varchar(20),
Pesel int

Freate table GodzinyPracy
id_pole int identity(1,1)
id_osoby int foreign key Osoby(id_pole),
Data data,
LiczbaGodzin int

Przypuśćmy, ze mam już utworzone i wypełnione tabele i chciałbym utworzyć zapytanie, w wyniku którego otrzymam wydruk, ile w sumie godzin każda osoba, była w pracy z podziałem na dni tygodnia z nazwą danego dnia.

Próbowałem coś takiego:

select Imie, Datename(Data_obecosci_w_pracy,DATEADD(WEEKDAY,90, GetDate())) from Osoby o left join GodzinyPracy g on(o.Id_pole = g.Id_osoby)

No prawie dobrze. Jak dołożysz GROUP BY po imieniu i dacie oraz zamiast godzin wstawisz sumę godzin dla tak utworzonej grupy to już będzie cacy. Jak będziesz miał jakieś jeszcze kłopoty, to koniecznie napisz jaka baza danych. M$ SQL, MySQL, .... I na wszelki wypadek zacytuj polecenia tworzące te tabele, bo w zapytaniu są jakby inne nazwy kolumn niż w poprzedzającym je opisie.

0
abrakadaber napisał(a):

a jak ktoś pracował od 22:00 01.01.2017 do 06:00 02.01.2017 to jak będzie wpis wyglądał w GodzinyPracy i jaki ma być wynik dla dnia 01.01 i 02.01?

Zdaje mi się, że to akurat jest problemem dla wpisującego dane. Nie mamy godziny rozpoczęcia pracy. Mamy dzień i ilość godzin w tym dniu. I niech wpisujący się martwi, co zrobić z nocką. Kiedyś (ponad 30 lat temu, jak pisałem program do liczenia czasu pracy) z takiej nocki robiło się dwa wpisy - godziny do północy i godziny po północy.

0

Niestety nie działa mi nadal: 'g.Data_obecosci_w_pracy' is not a recognized datename option.

select Imie, Datename(g.Data_obecosci_w_pracy, DATEADD(WEEKDAY, 90, GetDate())) 
	from Osoby o left join GodzinyPracy g on(o.Id_pole = g.Id_osoby) 
		group by imie

tabele stworzyłem taką

create table GodzinyPracy(
	Id_pole int identity(1,1) primary key,
	Id_osoby int foreign key references Osoby(Id_pole),
	Data_obecosci_w_pracy Date,
	Liczba_godzin int
)

Dane do tabeli wprowadziłem takie:

insert into GodzinyPracy(Id_osoby,Data_obecosci_w_pracy,Liczba_godzin)
	values
		(1,'2008-06-21',160),
		(2,'1999-06-21', 130),
		(3,'1988-06-21', 80)

Korzystam z ms sql serwer

0

ja nie bardzo rozumiem dlaczego używasz dateadd?
na mój gust to coś takiego

select 
    Imie, 
    Datename(weekday,g.Data_obecosci_w_pracy)  dzien,
    sum(liczba_godzin) godziny
from 
     Osoby o 
      left join GodzinyPracy g on(o.Id_pole = g.Id_osoby) 
group by 
     imie,
    Datename(weekday,g.Data_obecosci_w_pracy)

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