2016-04-01 2 views
1

У меня есть таблица с 1 столбом даты. Я хочу, чтобы сгруппировать даты по годам и месяцам, так что у меня есть матрица, такие как:Как использовать ось вращения и иметь две различные функции агрегата?

Year Jan Feb Mar...Dec Total 
2015..... 
2016 10 15 10... 10 115 
2017..... 

Это можно достичь с помощью функции PIVOT, и как именно я могу использовать его для достижения выше?

ответ

2

Вы можете достичь без PIVOT

SELECT 
    DATEPART(yyyy,t.the_date) as year, 
    SUM(CASE WHEN DATEPART(mm,t.the_date)=1 THEN 1 ELSE 0 END) as Jan, 
    SUM(CASE WHEN DATEPART(mm,t.the_date)=2 THEN 1 ELSE 0 END) as Feb, 
... 
    SUM(CASE WHEN DATEPART(mm,t.the_date)=12 THEN 1 ELSE 0 END) as Dec, 
    COUNT(*) as Total 
FROM the_table t 
GROUP BY DATEPART(yyyy,t.the_date) 
+0

Это тоже работает. Можно ли использовать «PIVOT» для такого запроса и будет ли он работать лучше, чем «GROUP BY». –

1

попробуйте использовать этот запрос: -

SELECT * 
    FROM (
     SELECT 
      year(yourDate) as [year],left(datename(month,yourDate),3)as [month], 
      Amount 
     FROM YourTableName 
    ) as s 
    PIVOT 
    (
     SUM(Amount) 
     FOR [month] IN (jan, feb, mar, apr, 
     may, jun, jul, aug, sep, oct, nov, dec) 
    )AS pvt 
Смежные вопросы