2010-08-24 2 views
1

Я таблица настроенные как этотSQL Server 2005 Query для поворота данных

Project Category Date  Hours 
Proj1  test  8/2/2010 2 
Proj1  test  8/3/2010 8 
Proj1  test  8/4/2010 4 
Proj1  test  8/5/2010 3 
Proj1  test  8/6/2010 5 

Я хочу разработать запрос, где вы можете ввести субботу (неделя Ending) дату и получить результат, как этот

WeekEnding Project Category SunHrs MonHrs TuesHrs WedHrs ThuHrs FriHrs SatHrs 
8/7/2010 Proj1 test  0  2  8  4  3  5  0 

Спасибо

+0

Какого долота У вас возникли проблемы с? –

+0

Я знаю, как работают параметры, но я не знаю, как поворачивать данные. –

ответ

1

Вот один из способов. Это выглядит как kludgey, но тогда поворот всегда выглядит таким образом для меня.

DECLARE @Saturday datetime 

SET @Saturday = 'Aug 7, 2010' 

SELECT 
    @Saturday  WeekEnding 
    ,Project 
    ,Category 
    ,isnull([1], 0) SunHrs 
    ,isnull([2], 0) MonHrs 
    ,isnull([3], 0) TueHrs 
    ,isnull([4], 0) WedHrs 
    ,isnull([5], 0) ThuHrs 
    ,isnull([6], 0) FriHrs 
    ,isnull([7], 0) SatHrs 
from (select Project, Category, Datepart(dw, Date) DOW, Hours 
     from MyTable 
     -- Fixed bug from -7 to -6 
     where Date between dateadd(dd, /*-7*/ -6, @Saturday) and @Saturday) Source 
    pivot (max(Hours) 
     for DOW in ([1],[2],[3],[4],[5],[6],[7])) as pvt 

Я использовал следующие параметры для копирования данных, чтобы проверить это с помощью:

DROP TABLE MyTable 
CREATE TABLE MyTable 
(
    Project varchar(10) not null 
    ,Category varchar(10) not null 
    ,Date  datetime  not null 
    ,Hours  int   not null 
) 

INSERT MyTable 
values 
('Proj1', 'test', '8/2/2010', 2), 
('Proj1', 'test', '8/3/2010', 8), 
('Proj1', 'test', '8/4/2010', 4), 
('Proj1', 'test', '8/5/2010', 3), 
('Proj1', 'test', '8/6/2010', 5) 
+1

Вам нужно проверить '@@ datefirst', если вы используете' datepart' с 'dw', и если его время суток имеет какой-либо компонент времени, отличный от полуночи' между', это не будет считаться в субботу. –

+0

спасибо, что отлично работает –

+0

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

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