2016-07-11 4 views
0

У меня есть таблица, в которой есть одно поле даты, которое является числом недели, а затем 7 десятичными полями, которые представляют отработанные часы.Цитирование через таблицу для создания временной таблицы

Я хочу прокрутить эту таблицу и создать строку в таблице temp для каждого дня недели с часами работы каждый день.

я мог бы сделать простой ...

SELECT UserID, WeekNum, Hours1, Hours2, Hours3, Hours4, Hours5, Hours6, Hours7 
INTO #NCExtract 
FROM Timesheet 

Но мне нужно, чтобы получить результат

UserID Date Hours 
UserID Date Hours 
UserID Date Hours 
UserID Date Hours 
UserID Date Hours 
UserID Date Hours 
UserID Date Hours 

из одной строки. Поэтому я начал следующим образом:

create table #NCExtract 
(
    UserID int, 
    WorkDate DateTime, 
    WorkHours decimal 
) 

Select * 
From TimeSheetTable 

While (Select Count(*) From TimeSheetTable) > 0 
Begin 
    Create #NCExtract record with 1st date hours 
    Create #NCExtract record with 2nd date hours 
    Create #NCExtract record with 3rd date hours 
    Create #NCExtract record with 4th date hours 
    Create #NCExtract record with 5th date hours 
    Create #NCExtract record with 6th date hours 
    Create #NCExtract record with 7th date hours 
End 

Я не уверен, как предоставить информацию в цикле для создания записей.

ответ

0

Я могу думать о двух способах делать то, что вы хотите (при условии, что t-sql, но должен работать и для других db).

UNPIVOT: https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

или 7 выберите заявления (см ниже грубом приближении)

--Since i do not have a table definition of timesheet table might be a little off 
create table #NCExtract (UserID int, WorkDate DateTime, WorkHours decimal) 

insert into #NCExtract (UserID, WorkDate, WorkHours) 
Select Userid, DateAdd(d,1,WeekNum), Hours1 -- I assumed that the weeknum column was a date/datetime 
From TimeSheetTable 
Where Hours1 is not null -- add any needed logic (e.g. not null or <> 0) 

insert into #NCExtract (UserID, WorkDate, WorkHours) 
Select Userid, DateAdd(d,2,WeekNum), Hours2 --update the date add for each select 
From TimeSheetTable 
Where Hours2 is not null 

--3, 4, 5, 6 ommited 

select * from #NCExtract 
order by UserID, WorkDate -- if the final result needs to be sorted, sort when selecting 
+0

Это откусил, но я думаю, что я получаю суть того, что вы говорите. Мне нужно будет запустить 7 вставок, по существу, по одному на каждый день. Я могу это сделать. Благодаря! – Dlangschied

+0

@ Dlangschied Glad Я могу помочь! Я знал, что это будет немного, но хотел бы дать вам быстрое приближение от предоставленной информации, чтобы указать вам в правильном направлении. –

+0

@ Dlangschied, если мой ответ дал вам необходимую информацию, вы можете пометить ее как принятый ответ, а если нет, то за что вы застряли? –

Смежные вопросы