2016-04-07 255 views
2

我如何使用SQL和SUM月度数据(季度视图)?我将不使用存储过程等季度销售额总和

Current data: 
    ID | Sales 
201601 | 5 
201602 | 15 
201603 | 5 
201604 | 20 
201605 | 8 
201606 | 2 

...

我的ID列是像YYYYMM

我要的是:

Quarter | Sales 
    Q1 | 25 
    Q2 | 30 

.... 
+0

请确认我的答案。如果您发现它有用,请接受它并/或向上提供它,以便将来有类似问题的搜索者发现它有用。 [https://stackoverflow.com/help/someone-answers] – DhruvJoshi

回答

0

你可以尝试像查询低于

SELECT 
    LEFT(ID,4) Year, 
    'Q'+ CAST((CAST(RIGHT(ID,2) AS INT)-1)/3 +1 AS varchar) Quarter, 
    SUM(Sales) Sales 
FROM 
    Yourtable 
GROUP BY 
    LEFT(ID,4), 
    'Q'+ CAST((CAST(RIGHT(ID,2) AS INT) -1)/3 +1 AS varchar) 
order by year 

SQL demo link

+0

谢谢。请检查示例SQL [link](http://sqlfiddle.com/#!6/3b5ba/1)计算不正确。你知道为什么吗? –

+0

回答更新!谢谢你指出我们的计算错误。查看更新后的链接http://sqlfiddle.com/#!6/3b5ba/6 – DhruvJoshi

0

您可以使用DATEPARTQUARTER得到DATETIME的四分之一。您只需使用DATEFROMPARTS构建DATETIME并解析您的ID列。

CONCAT只是将“Q”添加到期间编号。

SELECT LEFT(id,4) [Year], 
     CONCAT('Q',DATEPART(QUARTER, DATEFROMPARTS(LEFT(id,4), RIGHT(id, 2), 1))) [Quarter], 
     SUM(Sales) [Sales] 
FROM yourtable 
GROUP BY LEFT(id,4), DATEPART(q, DATEFROMPARTS(LEFT(id,4), RIGHT(id, 2), 1)) 
ORDER BY [Year], [Quarter] 
+0

目前计算已经结束了所有年份。示例[SQL](http://sqlfiddle.com/#!6/3b5ba/3)我怎样才能修改这只获得每年的四分之一? –

+0

将年份'LEFT(ID,4)'添加到您的选择和分组依据。 http://sqlfiddle.com/#!6/3b5ba/9 – JamieD77