После многого изучения большого количества синтаксиса SQL я все еще недостаточно.SQL Cases Group By the Pivots Агрегаты головной боли
У меня есть таблица, где данные хранятся как таковой:
LineNumber Date JobNumber Task Hours
------------------------------------------------------------------
1 2016-08-15 100 Task 1 0.5
1 2016-08-16 100 Task 1 2.0
2 2016-08-15 200 Task 2 4.0
3 2016-08-16 200 Task 3 1.5
4 2016-08-17 200 Task 6 3.5
То, что я после выполнения форматирования результатов, так как они выглядят следующим образом:
LineNumber JobNumber Task Monday Tuesday Wednesday
--------------------------------------------------------------------------
1 100 Task 1 0.5 2.0 0.0
2 200 Task 2 4.0 0.0 0.0
3 200 Task 3 0.0 1.5 0.0
4 200 Task 6 0.0 0.0 3.5
Используя заявления случае могу приблизиться. Это просто сгруппировало меня. Потому что мне нужны задачи для группировки, но они не будут, потому что у них уникальные даты и часы.
Используя это:
DECLARE @UserID int;
DECLARE @StartDate date;
DECLARE @MondayDate date;
DECLARE @TuesdayDate date;
DECLARE @WednesdayDate date;
DECLARE @ThursdayDate date;
DECLARE @FridayDate date;
DECLARE @SaturdayDate date;
DECLARE @SundayDate date;
SET @UserID = '1';
SET @StartDate = '2016-08-15';
SET @MondayDate = @StartDate;
SET @TuesdayDate = DATEADD(DAY, 1, @StartDate);
SET @WednesdayDate = DATEADD(DAY, 2, @StartDate);
SET @ThursdayDate = DATEADD(DAY, 3, @StartDate);
SET @FridayDate = DATEADD(DAY, 4, @StartDate);
SET @SaturdayDate = DATEADD(DAY, 5, @StartDate);
SET @SundayDate = DATEADD(DAY, 6, @StartDate);
select LineNumber, JobNumber, JobName, Task,
Monday = (CASE WHEN Date = @MondayDate THEN Hours ELSE '0.0' END),
Tuesday = (CASE WHEN Date = @TuesdayDate THEN Hours ELSE '0.0' END),
Wednesday = (CASE WHEN Date = @WednesdayDate THEN Hours ELSE '0.0' END),
Thursday = (CASE WHEN Date = @ThursdayDate THEN Hours ELSE '0.0' END),
Friday = (CASE WHEN Date = @FridayDate THEN Hours ELSE '0.0' END),
Saturday = (CASE WHEN Date = @SaturdayDate THEN Hours ELSE '0.0' END),
Sunday = (CASE WHEN Date = @SundayDate THEN Hours ELSE '0.0' END)
From v_TimesheetDataLines
WHERE Date >= @MondayDate and Date <= @SundayDate and UserID = @UserID
Order By LineNumber asc
я могу получить близко, но я до сих пор в конечном итоге с несгруппированных строк, где задача и номер задания являются одинаковыми.
Мои результаты в настоящее время, как это:
LineNumber JobNumber Task Monday Tuesday Wednesday
--------------------------------------------------------------------------
1 100 Task 1 0.5 0.0 0.0
1 100 Task 1 0.0 2.0 0.0
2 200 Task 2 4.0 0.0 0.0
3 200 Task 3 0.0 1.5 0.0
4 200 Task 6 0.0 0.0 3.5
Так сво 2 линии, которые являются одновременно быть строка 1 в конечных результатах, что мне нужно группе. Они всегда будут иметь одинаковый номер и задание.
Я пробовал различные CASE и вложенные SELECTS, но не могу туда добраться. Я нашел здесь несколько других сообщений о сводках, которые, я думаю, могут быть решением. К сожалению, я изо всех сил пытаюсь разобраться с этими утверждениями и как их использовать.
Любые ответы \ help очень ценятся как всегда.
Пожалуйста, покажите ожидаемый выход – TheGameiswar
Hi игры, второй блок кода показывает, что я после выхода. В основном, он должен группироваться с помощью LineNumber, JobNumber и Task. – DA082