2016-01-14 45 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"等)