2015-07-14 2 views
0

Я пытаюсь объединить эти два запроса в один. Может кто-нибудь помочь?Как слить два запроса в один запрос

Query 1: 
-------- 
SELECT 
    COUNT(Receiving_Log.Receiving_Log_Key) AS [Unresolved Issues], 
    HUB.HUB_Name, 
    AVG(DATEDIFF(day, Receiving_Log.Rec_Date, GETDATE())) AS Avg 
FROM HUB INNER JOIN Receiving_Log ON HUB.HUB_Key = Receiving_Log.HUB_Key 
WHERE (Receiving_Log.Resolved = 0) 
GROUP BY HUB.HUB_Name 

Query 2: 
--------  
SELECT 
    COUNT(Receiving_Log.urgent) AS [Urgent Issues], 
    HUB.HUB_Name, 
    AVG(DATEDIFF(day, Receiving_Log.Rec_Date, GETDATE())) AS Avg 
FROM HUB INNER JOIN Receiving_Log ON HUB.HUB_Key = Receiving_Log.HUB_Key 
WHERE (Receiving_Log.urgent = 0 and Receiving_Log.Resolved = 0) 
GROUP BY HUB.HUB_Name 

ответ

1

Поскольку единственное, что делает запросы отличается условие используется в ИНЕКЕ вы должны быть в состоянии переместить условия в случае выражения и сделать это следующим образом:

SELECT   
    SUM(CASE WHEN Receiving_Log.urgent = 0 AND Receiving_Log.Resolved = 0 THEN 1 ELSE 0 END) AS [Urgent Issues], 
    SUM(CASE WHEN Receiving_Log.Resolved = 0 THEN 1 ELSE 0 END) AS [Unresolved Issues], 
    HUB.HUB_Name, 
    AVG(DATEDIFF(day, CASE WHEN Receiving_Log.Resolved = 0 THEN Receiving_Log.Rec_Date END, GETDATE())) AS Avg_UNRESOLVED, 
    AVG(DATEDIFF(day, CASE WHEN Receiving_Log.urgent = 0 AND Receiving_Log.Resolved = 0 THEN Receiving_Log.Rec_Date END, GETDATE())) AS Avg_URGENT 
FROM HUB 
INNER JOIN Receiving_Log ON HUB.HUB_Key = Receiving_Log.HUB_Key 
GROUP BY HUB.HUB_Name; 

Это будет получения результата, как:

Urgent Issues | Unresolved Issues | HUB_Name | Avg_UNRESOLVED | Avg_URGENT 

Другим вариантом было бы, чтобы объединить результаты двух запросов с использованием union all.

+1

Это идеальное решение. Большое спасибо. –

Смежные вопросы