Sql server 联合、加入或分组
我有程序从各种来源提取数据,给我3个非常相似的表Sql server 联合、加入或分组,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我有程序从各种来源提取数据,给我3个非常相似的表 Metric | Tickets |Band ______________________________________ Acknowledgement | 45 | New Acknowledgement | 23 | Within Acknowledgement | 16 | Near Acknowledgement | 2 | Very Near 及 及 现
Metric | Tickets |Band
______________________________________
Acknowledgement | 45 | New
Acknowledgement | 23 | Within
Acknowledgement | 16 | Near
Acknowledgement | 2 | 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中实现这一点?这是一个假的pivot,应该可以满足您的需要。然后对每个表合并此查询
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
...
这是一个假轴,应该得到你想要的。然后对每个表合并此查询
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
...
这不需要为每个表重复所有的聚合和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;
这不需要为每个表重复所有的聚合和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;
为什么你不在一个表中列出所有12个条目呢?这个问题和答案会给你很多信息-有帮助吗@Pheonixblade9-这类问题通常是毫无意义的。。。通常,当一个人问这类问题时,模式已经定义好了,几乎没有什么办法可以改变它。@Stefan我应该重申我的问题:为什么OP没有一个包含所有12个条目的视图?这将大大简化问题。@Pheonixblade9所以,该视图需要包含一个执行什么操作的查询?哦,是的,该视图中的查询需要执行OP在这个问题中要求的操作…为什么不让一个表中包含所有12个条目?这个问题和答案将为您提供大量信息-有帮助吗@Pheonixblade9-这类问题通常是毫无意义的。。。通常,当一个人问这类问题时,模式已经定义好了,几乎没有什么办法可以改变它。@Stefan我应该重申我的问题:为什么OP没有一个包含所有12个条目的视图?这将大大简化问题。@Pheonixblade9所以,该视图需要包含一个执行什么操作的查询?哦,是的,该视图中的查询需要执行OP在这个问题中要求的操作…+1但是最后一个聚合中的票证数据是什么?在SUMCASE Band中,当“新”时,也将使用总和聚合,然后票证0结束新+1,但最后一个聚合中的票证数据是什么?在SUMCASE Band中,当“新”时,也会使用总和聚合,然后票0结束新是的,这肯定是一个更好的问题。是的,这肯定是一个更好的问题。