在sql中计算

时间:2015-02-28 09:25:12

标签: sql-server sql-server-2008

在表格中有几个月的时间

A        Sales
--------------
Jan14    20
Feb14    12
Mar14    13
Apr14    10
May14    10

所以我想要一些显示季度

输出的东西
Qtr       Sales
---------------
QTR114    45
QTR214    20

Qtr114 = Jan14 + feb14 + mar14同样适用于qtr214

如何动态地做到这一点?

1 个答案:

答案 0 :(得分:0)

如果您按照提供给我们的方式存储您的数据,那么这可行:

DECLARE @Test TABLE
(
    A VARCHAR(10)
    , Sales INT
);

INSERT INTO @Test
    (A, Sales)
VALUES
      ('Jan14', 20)
    , ('Feb14', 12)
    , ('Mar14', 13)
    , ('Apr14', 10)
    , ('May14', 10)
    , ('Jun14', 15)
    , ('Jul14', 80)
    , ('Dec14', 15)
    , ('Jan15', 15);

SELECT 'QTR' + CONVERT(VARCHAR(1), Q.Quarter) + (RIGHT(Y.Year, 2)) AS Qtr , SUM(Sales) AS Total
FROM @Test AS T
CROSS APPLY (SELECT DATEPART(YEAR, STUFF(T.A, 4, 0, ' 20'))) AS Y(Year)
CROSS APPLY (SELECT DATEPART(QUARTER, STUFF(T.A, 4, 0, ' 20'))) AS Q(Quarter)
GROUP BY Y.Year, Q.Quarter
ORDER BY Y.Year, Q.Quarter

我必须将您的日期格式化为正确的格式才能进行分组。 CROSS APPLY只是为了让代码更具可读性。