将值分组到具有年度细分的类别

时间:2013-12-24 17:40:08

标签: sql sql-server grouping

我有许可证申请表我想按类别显示每个财政年度的数据

对于我的查询,有2个关键列。

首先,有一个fee列,此列中的值决定了许可证的类型。

  • 0到300之间是次要的
  • 在300到600之间是标准
  • 600至2000之间是主要的

其次,有一个date字段用于财政年度。

我希望结果看起来像这样。

Category | 2013/14 | 2012/13
Minor    |      23 |      21
Standard |      10 |      11 
Major    |       5 |       3

我在下面有这个查询,但我不能在年份部分得到正确的答案。 非常感谢人们给我的任何建议。

select category.gr as [category],
sum(case when ((year(licence.[start_date]) in ('2010')) 
and (month(licence.[start_date]) in (4,5,6,7,8,9,10,11,12)))
or ((year(licence.[start_date]) in ('2011')) 
and (month(licence.[start_date]) in (1,2,3))) then 1 else 0 end) AS '10/11 Count',

from (  select case
when [fee_INC] between 0 and 350 then 'Minor'
when [fee_INC] between 350 and 600 then 'Standard'
else 'Major' end as gr
from [L_LICENCE_FIN]) as category,
from [L_LICENCE_FIN] as licence

group by category.gr

1 个答案:

答案 0 :(得分:0)

SELECT
  [category],
  [2013/14],
  [2012/13]
FROM (
  SELECT
    [category],
    STR(YEAR(DATEADD(month,-3,[start_date])),4)
      +'/'
      +RIGHT(STR(YEAR(DATEADD(month,-3,[start_date]))+1,4),2)
      AS [fiscal_year],
    COUNT(*) AS [count]
  FROM @L_LICENCE_FIN
  INNER JOIN (VALUES
    (  0, 300, 'Minor'),
    (300, 600, 'Standard'),
    (600,2000, 'Major')
  ) categories([fee_min], [fee_max], [category])
    ON ([fee] >= [fee_min] AND [fee] < [fee_max])
  GROUP BY [category],[start_date]
) p1
PIVOT(SUM([count]) FOR [fiscal_year] IN ([2013/14],[2012/13])) p2