簡體   English   中英

聯合和左聯接查詢

[英]Union and Left Join query

希望有人能幫助我,我有兩個表,在這個表中,我需要一個表,我可以在其中有小時使用總和,並可以在其中加入它們,以便可以對這些表的總和進行比較。

我的想法是這樣的查詢,但是有一個錯誤:

SELECT hagent.row_date, hagent.starttime_unix, SUM( hagent.i_stafftime ) 
FROM hagent
WHERE hagent.row_date = '2017-08-04'
AND hagent.starttime_unix IN('1700','1730','1800','1830','1900','1930','2000','2030','2100')
GROUP BY hagent.starttime_unix, hagent.row_date
UNION
SELECT hagent.row_date, hagent.starttime_unix, SUM( hagent.i_stafftime ) 
FROM hagent
WHERE hagent.row_date = '2017-08-05'
AND hagent.starttime_unix IN('900','930','1000','1030','1100','1130','1200','1230','1300','1330','1400','1430','1500','1530','1600','1630')
GROUP BY hagent.starttime_unix, hagent.row_date
LEFT JOIN (
    SELECT
    hsplit.row_date,
    hsplit.starttime AS hora ,
    Sum(hsplit.i_stafftime)
    FROM
    hsplit
    WHERE
    hsplit.row_date = '2017-08-05'
    GROUP BY
    hsplit.row_date,
    hsplit.starttime
) s ON (hagent.starttime_unix = s.hora)

注意 :我不確定聯接是否正確

EDITED

這是錯誤代碼:

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN (
    SELECT
    hsplit.row_date,
    hsplit.starttime,
    Sum(hsplit.i_staff' at line 12

您有幾處故障。 另外,我認為您可以在沒有UNION的情況下實現此目標,因為兩個查詢的唯一區別在於WHERE。

SELECT hagent.row_date, hagent.starttime_unix, SUM( hagent.i_stafftime ) 
FROM hagent
LEFT JOIN (
    SELECT
    hsplit.row_date,
    hsplit.starttime AS hora ,
    Sum(hsplit.i_stafftime)
    FROM
    hsplit
    WHERE
    hsplit.row_date = '2017-08-05'
    GROUP BY
    hsplit.row_date,
    hsplit.starttime
) s ON (hagent.starttime_unix = s.hora)
WHERE (
    hagent.row_date = '2017-08-04'
    AND hagent.starttime_unix IN('1700','1730','1800','1830','1900','1930','2000','2030','2100')
    ) OR (
    hagent.row_date = '2017-08-05'
    AND hagent.starttime_unix IN('900','930','1000','1030','1100','1130','1200','1230','1300','1330','1400','1430','1500','1530','1600','1630')
    )
GROUP BY hagent.starttime_unix, hagent.row_date

讓我知道是否可行。 如果出於某些特定原因需要工會:

SELECT * FROM (
    SELECT hagent.row_date, hagent.starttime_unix, SUM( hagent.i_stafftime ) 
    FROM hagent
    WHERE hagent.row_date = '2017-08-04'
    AND hagent.starttime_unix IN('1700','1730','1800','1830','1900','1930','2000','2030','2100')
    GROUP BY hagent.starttime_unix, hagent.row_date
    UNION
    SELECT hagent.row_date, hagent.starttime_unix, SUM( hagent.i_stafftime ) 
    FROM hagent
    WHERE hagent.row_date = '2017-08-05'
    AND hagent.starttime_unix IN('900','930','1000','1030','1100','1130','1200','1230','1300','1330','1400','1430','1500','1530','1600','1630')
) AS u
LEFT JOIN (
    SELECT
    hsplit.row_date,
    hsplit.starttime AS hora ,
    Sum(hsplit.i_stafftime)
    FROM
    hsplit
    WHERE
    hsplit.row_date = '2017-08-05'
    GROUP BY
    hsplit.row_date,
    hsplit.starttime
) s ON (u.starttime_unix = s.hora)
GROUP u.starttime_unix, u.row_date

抱歉,它的格式不正確...我不在裝有SQLMS的計算機上,可以在其中對其進行漂亮的格式化。

暫無
暫無

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

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