Sql server utworzenie zapytania do dwóch tabel

Odpowiedz Nowy wątek
2017-03-27 21:41
Pijany Terrorysta
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)

Pozostało 580 znaków

2017-03-28 00:11
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?


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

2017-03-28 07:41
Sadam2
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.

Przecież widać, że to MS SQL :) - Marcin.Miga 2017-03-28 09:30

Pozostało 580 znaków

2017-03-28 07:49
Sadam2
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.

Pozostało 580 znaków

2017-03-28 17:10
Nadziany Kret
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

Pozostało 580 znaków

2017-03-28 17:53
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)
edytowany 1x, ostatnio: Panczo, 2017-03-28 17:53

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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