2016-03-02 132 views
1

這是我實際的表...SQL數據透視表/連接表?

ID  SEQ   HOURS  ROUTER 

1   1000  13   Old 
1   2000  23   Old 
1   3000  17   Old 

2   1111  43   New 
2   2222  40   New 

3   1111  16   New 
3   2222  18   New 

4   1000  19   Old 
4   2000  31   Old 
4   3000  10   Old 

這是我所希望的表...

ID  ALPHA  BRAVO 

1   36   17  
2   43   40 
3   16   18 
4   50   10 

需要有在這裏的一些邏輯,我可以說這樣的話:

Old Router's 1000 + 2000 = Alpha 
New Router's 1111 = Alpha 

Old Router's 3000 = Bravo 
New Router's 2222 = Bravo 

我只有兩種類型的路由器,但它們的seq數據應該表示同樣的事情,這就是爲什麼我要結合結果的原因。我知道的唯一方法是採取2個單獨的查詢,每個查詢都以路由器爲目標,但我仍然需要以某種方式結合並轉換它們。

我不知道我要做的最好是用另一種語言在數據庫之外完成,但希望在sql內部完成,所以當我得到數據的時候我可以使用它。任何幫助,將不勝感激。

回答

3

您是否在尋找條件聚合?

select id, 
     sum(case when router = 'old' and seq in (1000, 2000) then hours 
       when router = 'new' and seq = 1111 then hours 
       else 0 
      end) as alpha, 
     sum(case when router = 'old' and seq in (3000) then hours 
       when router = 'new' and seq = 2222 then hours 
       else 0 
      end) as bravo 
from t 
group by id; 
+1

這是完美的作品,不需要連接,也不需要樞軸,所以非常感謝! – Slime