2016-01-14 44 views
-3

我有一个表如下全外连接与缺少项

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

我在问如何在SQL中执行此操作 –

+0

您尝试过哪些SQL查询? –

回答

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"等)