2012-08-28 50 views
1

我有程序从各种来源提取数据给我3非常相似的表。Union,Join,或GroupBy

Metric   | Tickets |Band 
______________________________________ 
Acknowledgement | 45  | New 
Acknowledgement | 23  | Within 
Acknowledgement | 16  | Near 
Acknowledgement | 2   | Very Near 

而且

Metric  | Tickets |Band 
___________________________________ 
Escalation | 10  | New 
Escalation | 43  | Within 
Escalation | 81  | Near 
Escalation | 6   | Very Near 

而且

Metric| Tickets |Band 
___________________________________ 
Fixed | 34  | New 
Fixed | 52  | Within 
Fixed | 36  | Near 
Fixed | 4   | Very Near 

现在,我想将它们以某种方式结合在一起有一个输出这样

Metric   | New | Within | Near | Very Near 
_____________________________________________________ 
Acknowledgement | 45 | 23  | 16 | 2 
Escalation  | 10 | 43  | 81 | 6 
Fixed   | 34 | 52  | 36 | 4 

如何我可以在MS SQLServer中实现这一点,请求se?

+0

为什么你不只是有一个表中的所有12个条目? – Codeman

+2

这个问题和答案会给你很多信息 - 有帮助吗? http://stackoverflow.com/questions/24470/sql-server-pivot-examples –

+0

@ Pheonixblade9 - 这类问题通常是毫无意义的......通常当一个人问这样的问题时,模式已经定义,并且没有什么可以改变它。 –

回答

4

这是一个假的主轴,应该得到你想要的。然后,您将为每个表合并此查询。

SELECT 
    Metric, 
    MAX(CASE Band WHEN 'New' THEN Tickets ELSE '' END) New, 
    MAX(CASE Band WHEN 'Within' THEN Tickets ELSE '' END) Within, 
    MAX(CASE Band WHEN 'Near' THEN Tickets ELSE '' END) Near, 
    MAX(CASE Band WHEN 'Very Near' THEN Tickets ELSE '' END) [Very Near] 
FROM 
    table 
GROUP BY 
    Metric 

UNION 
... 
+0

+1但是最后一个聚合中的票数据是什么?也可以使用'SUM()'聚合,如在'SUM(CASE乐队当'新'THEN门票ELSE 0结束)新'# –

+0

@MichaelBerkowski一个错字:) –

+0

解决完美的问题,谢谢! – kooldave98

5

这不需要重复所有的骨料和CASE表达式为每个表的 - 只是一个简单的工会会做,那么你就可以转动过这一点。

SELECT Metric, [New], [Within], [Near], [Very Near] FROM 
(
      SELECT Metric, Tickets, Band FROM dbo.table_a 
    UNION ALL SELECT Metric, Tickets, Band FROM dbo.table_b 
    UNION ALL SELECT Metric, Tickets, Band FROM dbo.table_c 
) 
AS x PIVOT 
(
    MAX(Tickets) FOR Band IN ([New],[Within],[Near],[Very Near]) 
) AS p; 
+0

+1用于回答关键点。 :) – Taryn

+0

是的,这绝对是一个更好的问题。 – Taryn