2013-05-20 33 views
1

我正在創建一個查詢,它將顯示每月銷售的預計數量與數量之間的關係。下面是我的兩張表格,第三張是我想要的輸出結果。這兩張表幾乎相同,只是日期和創建日期格式不同(我已將其轉換爲輸出,例如201301,因此不用擔心)。 正如你在我的輸出表中已經注意到的,出售的數量變成了25.00,因爲如果日期屬於同一月份和年份,它就會增加數量。我還需要考慮以下三個重要條件:結合兩個表來顯示所需的輸出

  1. 顯示與投影的數量,但沒有銷售行
  2. 爲了不預測數量,但是銷售額顯示的行
  3. (例如項目206)(見項目312)。
  4. 與凸起與銷售,以顯示行(前。item001 & 040)

我不知道我是否有使用或加入工會能夠達到我期望的輸出。

表A(銷售表)

item  code   Sold  date 
001  cust001  10.00  2013-01-20 
001  cust001  15.00  2013-01-25 
040  cust045  16.00  2013-04-07 
312  cust001  20.00  2013-03-13 

表B(投影表)

item  Custcode ProjectedQty  Creation Date 
001  cust001  20.00    2013-01-01 
040  cust045  50.00    2013-04-01 
206  cust121  60.00    2013-04-01 

輸出

item  Custcode sold  Date   ProjectedQty   Creation Date 
001  cust001  25.00  201301   20.00     201301 
312  cust001  20.00  201303 null     null 
040  cust045 16.00  201304   50.00     201304 
206  cust121  null  null   60.00     201304 

由於球員的幫助。

回答

1

嘗試

SELECT COALESCE(p.item, s.item) item, 
     COALESCE(p.code, s.code) code, 
     sold, 
     CONCAT(s.year, LPAD(s.month, 2, '0')) date, 
     ProjectedQty, 
     CONCAT(p.year, LPAD(p.month, 2, '0')) creationdate 
FROM 
(
    SELECT item, code, YEAR(`date`) year, MONTH(`date`) month 
    FROM sales 
    UNION 
    SELECT item, custcode, YEAR(`creationdate`), MONTH(`creationdate`) 
    FROM projection 
) i LEFT JOIN 
(
    SELECT item, code, SUM(sold) sold, YEAR(`date`) year, MONTH(`date`) month 
    FROM sales 
    GROUP BY item, code, YEAR(`date`), MONTH(`date`) 
) s ON i.item = s.item 
    AND i.code = s.code 
    AND i.year = s.year 
    AND i.month = s.month LEFT JOIN 
(
    SELECT item, custcode code, SUM(ProjectedQty) ProjectedQty, YEAR(`creationdate`) year, MONTH(`creationdate`) month 
    FROM projection 
    GROUP BY item, custcode, YEAR(`creationdate`), MONTH(`creationdate`) 
) p ON i.item = p.item 
    AND i.code = p.code 
    AND i.year = p.year 
    AND i.month = p.month 
ORDER BY code, item 

輸出:

| ITEM | CODE | SOLD | DATE | PROJECTEDQTY | CREATIONDATE | 
------------------------------------------------------------------ 
| 001 | cust001 |  25 | 201301 |   20 |  201301 | 
| 312 | cust001 |  20 | 201303 |  (null) |  (null) | 
| 040 | cust045 |  16 | 201304 |   50 |  201304 | 
| 206 | cust121 | (null) | (null) |   60 |  201304 | 

SQLFiddle

+0

非常感謝您幫助先生..它的工作原理! – user1840952

+0

@ user1840952不客氣。很高興它幫助:) – peterm

+0

我完成了我的報告,godbless :) – user1840952

1

爲什麼不使用簡單的加入這個?

SELECT * FROM `sales`, `projection` WHERE `code`=`custcode`; 

做一個鑑於上述查詢,並使用WHERE條款,你可以改變數據。

+0

對不起,我沒有得到它? – user1840952

0

使用聯合創建視圖。然後你可以使用下面的查詢:

select *, sum(sold) as sold from view group by item 

另一個是:

select *, sum(sold) from (
select item,  code as Custcode, sold,  date,   'ProjectedQty' as ProjectedQty,   'Creation Date' as Creation Date from table 1 union select item,  Custcode, sold,  Date,   ProjectedQty,   Creation Date, from table 2) group by item 
相關問題