我有一张表如下
group, identifier, date, value
g1, a, 2015-01-31, 1
g1, a, 2015-02-28, 2
g2, a, 2015-02-28, 0.5
g2, a, 2015-03-31, 1
g1, b, 2015-01-31, 3
g1, b, 2015-02-28, 1
g2, b, 2015-02-28, 0
g2, b, 2015-03-31, 2
我想创建一个sql查询,通过加入标识符和日期,它给我g1 - g2的值 对于表格中没有g1的情况,它应该给出-g2,如果没有g2,它应该给我g1
结果应如下所示
identifier, date, value
a, 2015-01-31, 1
a, 2015-02-28, 1.5
a, 2015-03-31, -1
b, 2015-01-31, 3
b, 2015-02-28, 1
b, 2015-03-31, -2
答案 0 :(得分:0)
您不需要JOIN
,您可以改为GROUP BY
。使用CASE
表达式将g1值相加为正数,将g2值相加为负数:
select identifier, "date", SUM(case when "group" = 'g1' then "value"
when "group" = 'g2' then -"value"
end) as "value"
from tablename
group by identifier, "date"
您可能需要分隔date
,group
和value
列,因为这些字是保留的(至少在ANSI SQL中)。即将这些列名称加上双引号。 ("date"
等。)