2016-03-02 128 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