2014-09-01 291 views
0

我有兩個正在運行的查詢。查詢1對一個大表的過濾器,準確地返回我需要的數據,它看起來像這樣:將兩個查詢合併爲一個

/****** QUERY #1 - This query will filter the data ******/ 
    SELECT [WacnId], 
    [StartDT] 
    ,[EndDT] 
    ,[Group] 
    ,[ID_Agency] 
    ,[TargetUnit_Agency], 


    case [Group] 
    when 1 then 'in' 
    when 0 then 'out' 
    end as traffic 

FROM [GW_20140315].[dbo].[ARC_Calls_ReportView] 

WHERE [GroupDisplayID] = 'T802149' OR [ID_Agency] = 'Dispatch' or [TargetUnit_Agency] = 'Dispatch' 
order by StartDT 

查詢#2行爲從查詢1過濾後的數據,併產生一個1/2每小時報告。查詢2如下所示:

/******Query #2- This query will take the filtered data and process it as needed ******/ 
SELECT dateadd(mi, (datediff(mi, 0, StartDT)/30) * 30, 0) as HalfHour 
    , sum(DATEDIFF (s , [StartDT] , [EndDT])) as [Total Time (Seconds)], 
    SUM(CASE WHEN [TargetUnit_Agency] = 'Dispatch' then 1 ELSE 0 END) AS InCount, 
SUM(CASE WHEN [ID_Agency] = 'Dispatch' then 1 ELSE 0 END) AS OutCount 
FROM [Radio].[dbo].[Filter_Data]--This is how I did it before, but now I want to combine the two queries 
GROUP BY dateadd(mi, (datediff(mi, 0, StartDT)/30) * 30, 0) 
ORDER BY 1 

我該如何將這兩個查詢合併爲一個?

+0

Is [Radio]。[dbo]。[Filter_Data]臨時表或視圖還是子查詢? – Fenistil 2014-09-01 22:33:03

+0

你想把'UNION'(把它們垂直連接在一起作爲兩個列表)或者將它們關聯到某個事物上(連接它們)。您需要提供一些示例輸入和輸出數據。 – 2014-09-01 22:39:50

+0

只需用方括號中的查詢1代替'[Radio]。[dbo]。[Filter_Data]',您就很好 – cha 2014-09-01 22:41:22

回答

1

你可以使用一個CTE來形容您的過濾後的數據(第一查詢),然後查詢中使用CTE作爲主表(第二查詢):

;WITH FilteredCTE AS 
(
    SELECT [WacnId], 
    [StartDT] 
    ,[EndDT] 
    ,[Group] 
    ,[ID_Agency] 
    ,[TargetUnit_Agency], 
    case [Group] 
     when 1 then 'in' 
     when 0 then 'out' 
    end as traffic 
    FROM [GW_20140315].[dbo].[ARC_Calls_ReportView] 
    WHERE [GroupDisplayID] = 'T802149' 
     OR [ID_Agency] = 'Dispatch' 
     or [TargetUnit_Agency] = 'Dispatch' 
) 
SELECT dateadd(mi, (datediff(mi, 0, StartDT)/30) * 30, 0) as HalfHour, 
sum(DATEDIFF (s , [StartDT] , [EndDT])) as [Total Time (Seconds)], 
SUM(CASE WHEN [TargetUnit_Agency] = 'Dispatch' then 1 ELSE 0 END) AS InCount, 
SUM(CASE WHEN [ID_Agency] = 'Dispatch' then 1 ELSE 0 END) AS OutCount 
FROM FilteredCTE 
GROUP BY dateadd(mi, (datediff(mi, 0, StartDT)/30) * 30, 0) 
ORDER BY StartDT 
+0

這就是我所需要的,但是它在用StartDT命令行執行時遇到了問題,所以我將它移除了,它運行良好且有趣,表由StartDT排序,這很好,但我確實需要確保始終發生。我需要在某處添加StartDT的訂單嗎? – eltel2910 2014-09-01 23:56:06

+1

@ eltel2910這是我的不好,你可能沒有在CTE定義內訂購。您需要在最終選擇中定義訂單。 – 2014-09-02 00:07:03

+0

@Paraskevopoulos,我的理由是通過它,但沒有你的幫助我無法做到。謝謝。 – eltel2910 2014-09-02 00:10:52

0

只需選擇查詢1 FROM QUERY2:

SELECT Dateadd(mi, (Datediff(mi, 0, startdt)/30) * 30, 0) AS HalfHour, 
     Sum(Datediff (s, [startdt], [enddt]))     AS 
     [Total Time (Seconds)], 
     Sum(CASE 
      WHEN [targetunit_agency] = 'Dispatch' THEN 1 
      ELSE 0 
      end)            AS InCount, 
     Sum(CASE 
      WHEN [id_agency] = 'Dispatch' THEN 1 
      ELSE 0 
      end)            AS OutCount 
FROM (SELECT [wacnid], 
       [startdt], 
       [enddt], 
       [group], 
       [id_agency], 
       [targetunit_agency], 
       CASE [group] 
       WHEN 1 THEN 'in' 
       WHEN 0 THEN 'out' 
       end AS traffic 
     FROM [GW_20140315].[dbo].[arc_calls_reportview] 
     WHERE [groupdisplayid] = 'T802149' 
       OR [id_agency] = 'Dispatch' 
       OR [targetunit_agency] = 'Dispatch' 
     ORDER BY startdt) 
GROUP BY Dateadd(mi, (Datediff(mi, 0, startdt)/30) * 30, 0) 
ORDER BY 1