[MSSQL] Jak dorzucić do wyniku SELECT kilka rekordów?

0

Cześć, mam tabelę, która wygląda tak:

Name
Date
WorkTime

Jak widać są 3 kolumny.
I teraz załóżmy, że mam następujące dane:

Name    |    Date       |    WorkTime
----------------------------------
Janek    |  3.01.2009  |      8:00
Janek    |  4.01.2009  |      7:00
Janek    |  6.01.2009  |      8:00
Zbysiu   |  2.01.2009  |     8:00
Zbysiu   |  3.01.2009  |     8:00

Natomiast, ja potrzebuję stworzyć jakiś widok, żeby otrzymać następujące dane(z powyższej tabeli)

Name    |    Date       |    WorkTime
----------------------------------
Janek    |  1.01.2009  |         0
Janek    |  2.01.2009  |         0
Janek    |  3.01.2009  |      8:00
Janek    |  4.01.2009  |      7:00
Janek    |  5.01.2009  |         0
Janek    |  6.01.2009  |      8:00
Janek    |  7.01.2009  |      0
....i tak do 31 dnia
Zbysiu   |  1.01.2009  |      0
Zbysiu   |  2.01.2009  |     8:00
Zbysiu   |  3.01.2009  |     8:00
Zbysiu   |  4.01.2009  |     0
.... i tak do 31 dnia

Czyli generalnie chodzi o to, żeby "dołożyć" rekordy dla każdego pracownika tak, żeby każdy człowiek miał w wyniku 31 rekordów(jeden rekord - 1 dzień).

Jak coś takiego osiągnąć?

0

jeśli stored proc w mssqlu potrafią zwracać rekordy to zrób to tak

0

Zrobic LEFT JOINa po nr dnia z czymś takim:

select 10*d.d+j.j dzien
from
(
select 0 d
union select 1
union select 2
union select 3
)d,
(
select 1 j 
union select 2
union select 3
union select 4
union select 5
union select 6
union select 7
union select 8
union select 9
union select 0
)j
where 10*d.d+j.j between 1 and 31
0

A szybsza będzie procedura składowana, czy ten zmyślny select?
Zrobiłem tak, że po prostu procedura składowana wypełnia mi osobną tabelę odpowiednimi danymi.

0

Zakładając, że mam tabelkę z pracownikami oraz tabelkę z datami zrobiłbym taki banalny widoczek:

create view dbo.widoczek
as
  select p.Name, d.Data, isnull(t.WorkTime, '00:00') as WorkTime
  from dbo.pracownicy p
  cross join dbo.Daty d
  left join dbo.czas_pracy t on t.Date = d.Data and p.Name = t.Name
  where d.rok = 2009 and d.miesiac = 1

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