表的全外连接本身缺少条目

时间:2016-01-14 04:14:11

标签: sql

我有一张表如下

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  

1 个答案:

答案 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"

您可能需要分隔dategroupvalue列,因为这些字是保留的(至少在ANSI SQL中)。即将这些列名称加上双引号。 ("date"等。)