2014-01-09 4 views
0

Возможно ли использовать функцию агрегата вне точки поворота? Я пытаюсь это сделать. Здесь я пишу запрос, который содержит агрегированную функцию вне Pivot, это не работало.Агрегатная функция вне сводной оси

select id,**sum(num),**jan,feb 
from (select id, num, month(date) as date, val 
...... 
....... 
)p 
pivot(sum(val) for date in ([jan],[feb])) as pivotanble 

если я опустить сумму (NUM) или использовать только Num он работает не иначе. Каким будет решение?

начальный вход

 id date  num val 

     1---2001.06.03--2------3 

     2---2002.02.05--10-----5 

     3----2002.02.09---4----2 

Ожидаемое

  JAN FEB MAR... year 

      0--- 8 --0 -- 14 

год будет дан в качестве входных данных здесь год = 2002

+0

Может вы добавляете образцы данных и ожидаемый результат? На данный момент ваш вопрос не совсем ясен. – GarethD

ответ

0

Конечно, вы можете просто сложить все месячные значения, чтобы получить годовую стоимость:

SELECT 
    id, 
    Jan, 
    Feb, 
    ... 
    Year = Jan + Feb + ... 
FROM (
    SELECT 
    id, 
    num, 
    date = LEFT(DATENAME(MONTH, date), 3) 
    FROM ... 
    WHERE ... 
) AS s 
PIVOT (
    SUM(num) 
    FOR date IN (Jan, Feb, ...) 
) AS p 
; 

Но можно также рассчитать годовую стоимость заранее в подвыборки, используя SUM() OVER ():

SELECT 
    id, 
    Jan, 
    Feb, 
    ... 
    Year 
FROM (
    SELECT 
    id, 
    num, 
    date = LEFT(DATENAME(MONTH, date), 3), 
    Year = SUM(num) OVER (PARTITION BY LEFT(DATENAME(MONTH, date), 3)) 
    FROM ... 
    WHERE ... 
) AS s 
PIVOT (
    SUM(num) 
    FOR date IN (Jan, Feb, ...) 
) AS p 
; 
Смежные вопросы