2011-12-12 80 views
0

我比较不同年份的同一周的销售额。就像2010和2011年的第一周一样。所以用我的查询,我可以得到这样的结果。如何在列中减去两个具有一个匹配值的行

week|year|sales 
1 |2010|5 
1 |2011|10 
2 |2010|7 
2 |2011|13 

我的查询看起来是这样的:

SELECT 
min(x.id) AS id, 
week as week, 
year, 
COUNT(*) AS amount, 
SUM(price_unit) AS price 
FROM (
    SELECT 
    so.id as id, 
    DATE_PART('week', so.date_order) AS week, 
    DATE_PART('year', so.date_order) AS year, 
sol.price_unit 
FROM 
sale_order AS so 
INNER JOIN sale_order_line AS sol ON sol.order_id = so.id 
WHERE so.date_order BETWEEN '2010-01-01' AND '2011-12-31' 
) AS x 
GROUP BY 
week, 
year 

我想要做的,是要减去的不同年份的同一周内,以获得销售量的差异。像week2011-week2010和结果应该看起来像

week|year  |difference 
1 |2011-2010|5 
2 |2011-2010|6 

我只是没有一个想法如何减去这样的:)

回答

1

要得到两年的区别,试试这个:

SELECT 
week as week, 
'2011-2010' as year, 
sum(case calcyear when 2011 then 1 else -1 end) AS amount, 
sum(case calcyear when 2011 then price_unit else -1*price_unit end) AS price 
FROM (
    SELECT 
    so.id as id, 
    DATE_PART('week', so.date_order) AS week, 
    DATE_PART('year', so.date_order) AS calcyear, 
sol.price_unit 
FROM 
sale_order AS so 
INNER JOIN sale_order_line AS sol ON sol.order_id = so.id 
WHERE so.date_order BETWEEN '2010-01-01' AND '2011-12-31' 
) AS x 
GROUP BY 
week 
+0

如果试试这个,我得到一个错误“列”calcyear“不存在”。所以似乎我的数据库不认识这样的功能?有没有其他的选择? – Tatsuo

+0

@tatsuo,calcyear是子查询中**修改的别名(以便在查询中可以显示字符串“year”) - 检查您是否相应地修改了子查询。 –

+0

哦; D我怎么会错过:) – Tatsuo

相关问题