2014-10-08 6 views
1

У меня есть мнение, что содержит следующие поля ...Сводная таблица с датами

ConID int 
Task varchar 
MeasureCategory varchar 
State char(2) 
DueDate datetime, 
Frequency char(1) 
Pattern char(1) 
TargetMin decimal 
TargetMax decimal 
Achieved decimal 

Использование переменных для ConID, государства и DueDate, я хочу, чтобы создать сводную таблицу, которая дает мне Средние значения для TargetMin, TargetMax и Достигнуто, по месяцам, за значение месяца переменной за установленный срок плюс каждый из предыдущих четырех месяцев от этой переменной. Таким образом, с датой окончания переменной величиной 9/30/2014 Я хочу, чтобы значения для DueDate временных рамок ...

9/1/2014 - 9/30/2014 
8/1/2014 - 8/31/2014 
7/1/2014 - 7/31/2014 
6/1/2014 - 6/30/2014 

Оно также должно быть для переменного значения, введенное для ConID и для государства.

Все три переменные, ConID, State и DueDate будут меняться. Таким образом, для данного ConID в указанном состоянии я хочу Средние значения для TargetMin, TargetMax и Достигнуты по месяцам за последние четыре месяца, заканчивающиеся значением переменной, введенным для DueDate. В течение каждого месяца может быть несколько записей, или нет. Данные можно вводить как запись по неделям, так и запись по месяцам. Вот почему я хочу среднего.

Я новичок в сводных таблицах и понятия не имею, с чего начать.

Что мне нужно, чтобы увидеть это ...

-____----------------------------------------- MONTH 1 VALUES___________________ = MONTH 2 VALUES________________ - MONTH 3 VALUES___________________ - MONTH 4 VALUES____________________ 
Task - MeasureCategory - Frequency - Pattern - TargetMin - TargetMax - Achieved - TargetMin - TargetMax - Achieved - TargetMin - TargetMax - Achieved - TargetMin - TargetMax - Achieved 
+0

Задача MeasureCategory Частота Pattern Month1TargetMin/Max/Достигнутые Month2TargetMin/Max/Достигнутые Month3TargetMin/Max/Достигнутые Month4TargetMin/Max/Достигнутые – Support

ответ

0

Вместо того, делать работу за вас, я хочу дать вам ссылку на how to use PIVOT and UNPIVOT in sql-server (technet.microsoft.com), который имеет несколько примеров на основной использование. Кроме того, если вы ищете в Интернете, вы найдете множество примеров использования PIVOT в StackOverflow.

Если вам нужно PIVOT быть динамичным, принять this example из stackoverflow.com

+0

Проблема я бегу в том, как сделать часть даты. Я хочу, чтобы дата менялась и основывалась на некотором значении даты окончания. Таким образом, я не нашел ничего, что работает с датами. – Support

+0

@Support Я обновил ответ на примере с StackOverflow.com о том, как это происходит динамически. –

+0

Это до тех пор, пока я не получил ... – Support

0

Здесь вход DueDate который является DateTime, то CTE рассчитывает начало и конец месяца, заканчивающегося DueDate. Как только у нас будут диапазоны месяцев, Group By срок выполнения каждого месяца в течение 4 месяцев даст вам средние значения.

declare @duedate datetime = '6/30/2014' 
declare @conId int = 100 
declare @state char(2) = 'ab' 

;with CTE(monthend, monthstart, N) 
as 
(select DATEADD(MONTH, 0, @duedate) as monthend, 
     DATEADD(MONTH,datediff(MONTH, 0, @duedate),0) as monthstart, 1 
    UNION ALL 
    select DATEADD(MONTH,1, monthend) as monthend, 
     DATEADD(MONTH,datediff(MONTH, 0, DATEADD(MONTH,1, monthend)),0) as monthstart , N+1 
    FROM CTE 
    where N <=3 
) 
select ConId, 
     AVG(TargetMin), 
     AVG(TargetMax), 
     AVG(Achieved), 
     DATEADD(MONTH,datediff(MONTH, 0, DueDate),0) 
from tableA 
JOIN CTE 
on DueDate between cte.monthstart and cte.monthend 
and conId = @conId 
and State = @State 
group by ConId,DATEADD(MONTH,datediff(MONTH, 0, DueDate),0) 
Смежные вопросы