簡體   English   中英

將 2 個 sql 查詢合並為 1 個查詢

[英]Combine 2 sql queries into 1 query

我現在有 2 個查詢,如果可能,我希望將其合並為 1 個。

我在 Tickets_Open 表中存儲了未結票,在 Tickets_Closed 中已關閉票。 兩個表都有“Date_Requested”和“Date_Completed”列。 我需要計算每天請求和完成的門票數量。

我的票請求計數查詢如下:

SELECT SUM(Count) AS TotalOpen, Date FROM(
 SELECT COUNT(Ticket_Request_Code) AS Count, Date_Requested AS Date
 FROM Tickets_Closed
 WHERE Date_Requested >='2018-01-01 00:00:00'
 GROUP BY(Date_Requested)
 UNION
 SELECT COUNT(Work_Request_Code) AS Count, Date_Requested AS Date
 FROM Tickets_Open
 WHERE Date_Requested >='2018-01-01 00:00:00'
 GROUP BY(Date_Requested)
) AS t1 GROUP BY Date ORDER BY `t1`.`Date` DESC

我的票完成計數查詢如下:

SELECT COUNT(Ticket_Request_Code) AS CountClosed, Date_Completed AS Date
FROM Tickets_Closed
Where Date_Completed >='2018-01-01 00:00:00'
GROUP BY(Date_Completed)

兩個查詢都返回正確的結果。 對於打開,它返回列標題 Date 和 TotalOpen。 對於關閉,它返回列標題 Date 和 CountClosed。

是否可以使用以下列標題日期、TotalOpen、CountClosed 返回它。

您可以將這些組合為:

SELECT Date, SUM(isopen) as isopen, SUM(isclose) as isclose
FROM ((SELECT date_requested as date, 1 as isopen, 0 as isclose
       FROM Tickets_Closed
       WHERE Date_Requested >= '2018-01-01'
      ) UNION ALL
      (SELECT date_requested, 1 as isopen, 0 as isclose
       FROM Tickets_Open
       WHERE Date_Requested >= '2018-01-01'
      ) UNION ALL
      (SELECT date_closed as date, 0 as isopen, 1 as isclose
       FROM Tickets_Closed
       WHERE date_closed >= '2018-01-01'
      )
     ) t
GROUP BY Date
ORDER BY Date DESC;

這假設Ticket_Request_CodeWork_Request_Code不是NULL 如果COUNT()確實用於檢查NULL值,則將條件添加到每個子查詢中的WHERE子句。

此查詢也在日期上使用 FULL OUTER JOIN,但它正確地將打開/關閉計數加在一起為您提供 TotalOpen 計數。 如果您有一天沒有關閉任何票證,這也將處理可能的 NULL 值。

WITH open AS 
(
SELECT COUNT(Work_Request_Code) AS OpenCount, Date_Requested AS Date
FROM Tickets_Open
WHERE Date_Requested >='2018-01-01 00:00:00'
GROUP BY(Date_Requested)
)
, close AS
(
SELECT COUNT(Ticket_Request_Code) AS ClosedCount, Date_Requested AS Date
FROM Tickets_Closed
WHERE Date_Requested >='2018-01-01 00:00:00'
GROUP BY(Date_Requested)
)
SELECT
COALESCE(c.Date, o.Date) AS Date
, IFNULL(o.OpenCount, 0) + IFNULL(c.ClosedCount, 0) AS TotalOpen
, IFNULL(c.CountClosed, 0) AS CountClosed
FROM open o
FULL OUTER JOIN closed c ON o.Date = c.Date

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM