我们将收入差异计算为2012年第一季度至第四季度以及2013年第一季度至第四季度的百分比变化。然后我们需要总计正数,负数总数和无变化总数。所有数据都在一个表中。这需要完全在SQL中。
我已经成功获得了2012年的成绩,然后是2013年的成绩,但似乎无法让他们获得同样的记录。
SELECT ID_FIELD, sum( Receipts_Total )
FROM QR_Dom
WHERE quarter LIKE '%2012%'
GROUP BY ID_FIELD;
和
SELECT ID_FIELD, sum( Receipts_Total )
FROM QR_Dom
WHERE quarter LIKE '%2013%'
GROUP BY ID_FIELD;
最后我需要执行此计算,然后计算正/负/零,然后除以总计数:
(2013 Receipts_Total - 2012 Receipts_Total) / 2012 Receipts_Total
我当前的(硬编码ID)查询如下:
SELECT ID_FIELD, (((SELECT SUM(Receipts_Total)
FROM QR_Dom
WHERE quarter LIKE '%2013%'
AND ID_FIELD = 10001
GROUP BY ID_FIELD)
- (SELECT SUM(Receipts_Total)
FROM QR_Dom
WHERE quarter LIKE '%2012%'
AND ID_FIELD = 10001
GROUP BY ID_FIELD))
/ (SELECT SUM(Receipts_Total)
FROM QR_Dom
WHERE quarter LIKE '%2012%'
AND ID_FIELD = 10001
GROUP BY ID_FIELD) ) AS RATIO
FROM QR_Dom
WHERE ID_FIELD = 10001
GROUP BY ID_FIELD
答案 0 :(得分:0)
您可以使用case
语句查找确切的年份:
SELECT (CASE WHEN quarter LIKE '%2012%' THEN 2012
WHEN quarter LIKE '%2013%' then 2013
END) as yr, ID_FIELD, sum( Receipts_Total )
FROM QR_Dom
WHERE quarter LIKE '%2012%' or quarter LIKE '%2013%'
GROUP BY (CASE WHEN quarter LIKE '%2012%' THEN 2012
WHEN quarter LIKE '%2013%' then 2013
END), ID_FIELD;
这应该适用于MySQL和SQL Server。
编辑:
如果您需要差异,可以使用条件聚合和算术来实现:
SELECT ID_FIELD,
(SUM(CASE WHEN quarter LIKE '%2013%' THEN Receipts_Total ELSE - Receipts_TOTAL
END) /
SUM(CASE WHEN quarter LIKE '%2012%' THEN Receipts_Total
END)
)
FROM QR_Dom
WHERE quarter LIKE '%2012%' or quarter LIKE '%2013%'
GROUP BY ID_FIELD;