2017-08-17 28 views
0

我有2代表具有以下數據:如何2臺結合了同日

表1(dummy_daily)

Entry    storenum    busidate    daily_budget 
1      1     2017-07-01    4000 
2      1     2017-07-02    3500 
3      1     2017-07-03    2000 
4      1     2017-07-04    6000 
5      1     2017-07-05    1500 

表2(site_labour)

Lab_id    storenum    busidate    lab_hour 
1123     1     2017-07-01    128 
1124     1     2017-07-02    103 
1125     1     2017-07-03    114 
1126     1     2017-07-04    108 
1127     1     2017-07-05    118 

這是我目前的查詢結合具有相同日期的2個表給出結果daily_budgetlab_hour QUERY:

SELECT 
a.daily_budget as Ideal, c.lab_hour as Actual, 
b.store_name, b.storenum,a.busidate 
FROM dummy_daily a JOIN site_store b ON b.storenum=a.storenum JOIN 
site_labour c ON b.storenum=c.storenum 
WHERE b.storenum='1' AND 
(CASE WHEN c.busidate BETWEEN '2017-07-01' AND '2017-07-05' THEN c.lab_hour ELSE 0 END) 
AND (CASE WHEN a.busidate 
BETWEEN '2017-07-01' AND '2017-07-05' THEN a.daily_budget ELSE 0 END) 

但我的當前查詢給我一個錯誤的結果:當前查詢的

錯誤結果

Ideal   Actual    storenum     busidate 
4000   128     1      2017-07-01 
3500   128     1      2017-07-02 
2000   128     1      2017-07-03 
6000   128     1      2017-07-04 
1500   103     1      2017-07-05 
4000   103     1      2017-07-01 
3500   103     1      2017-07-02 
2000   103     1      2017-07-03 
6000   103     1      2017-07-04 
1500   103     1      2017-07-05 

此數據將一直持續到實際118結束

預期結果

Ideal   Actual    storenum     busidate 
4000   128     1      2017-07-01 
3500   103     1      2017-07-02 
2000   114     1      2017-07-03 
6000   108     1      2017-07-04 
1500   118     1      2017-07-05 
+0

您還可以解釋加入兩個表格後的邏輯嗎? –

+0

我需要在這兩個表之間合併,以便在1個查詢中獲得'daily_budget'和'lab_hour'。 – NHH

+0

@NHH,讓我們添加更多示例數據,以便我們能夠理解你想要的結果 – hiule

回答

0

您已經錯過了一個多表,以便其做出的混亂創建邏輯, 按我的理解,我創建了一個SELECT語句。請嘗試以下操作: -

SELECT 
    dummy_daily.daily_budget as Ideal, site_labour.lab_hour as Actual, 
    site_store.store_name, site_store.storenum, dummy_daily.busidate 
    FROM dummy_daily 
    JOIN site_store 
    ON dummy_daily.storenum = site_store.storenum 
    JOIN site_labour 
    ON dummy_daily.storenum = site_labour.storenum 
    WHERE (dummy_daily.storenum = 1) 
    AND (dummy_daily.busidate BETWEEN '2017-07-01' AND '2017-07-05') 
    AND (site_labour.busidate BETWEEN '2017-07-01' AND '2017-07-05') 
    AND (dummy_daily.busidate = site_labour.busidate); 
0

讓我們嘗試下面的SQL:

SELECT 
a.daily_budget as Ideal, c.lab_hour as Actual, 
b.store_name, b.storenum,a.busidate 
FROM dummy_daily a JOIN site_store b ON b.storenum=a.storenum AND b.busidate=a.busidate JOIN 
site_labour c ON b.storenum=c.storenum AND b.busidate=c.busidate 
WHERE b.storenum='1' AND 
(CASE WHEN c.busidate BETWEEN '2017-07-01' AND '2017-07-05' THEN c.lab_hour ELSE 0 END) 
AND (CASE WHEN a.busidate 
BETWEEN '2017-07-01' AND '2017-07-05' THEN a.daily_budget ELSE 0 END)