1

毎月の予測数量と販売数量を表示するクエリを作成しています。以下は私の2つのテーブルで、3番目のテーブルは出力として欲しいものです。2 つのテーブルは、日付と作成日の形式が異なることを除いて、ほぼ同じです (これを 201301 などの出力に変換したので、心配する必要はありません)。私の出力テーブルで気づいたように、日付が同じ月と年に該当する場合、数量が追加されるため、販売数量は 25.00 になります。また、次の 3 つの重要な条件も考慮する必要があります。

  1. 予測数量を含むが売上を含まない行を表示する (例: アイテム 206)
  2. 予測数量なしで売上ありの行を表示するには (例: アイテム 312)
  3. 予測と売上のある行を表示する (例: 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

助けてくれてありがとう。

4

3 に答える 3

1

これに単純な結合を使用しないのはなぜですか?

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

上記のクエリのビューWHEREを作成し、句を使用して、データを変更できます。

于 2013-05-20T04:35:55.380 に答える
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 |

SQLフィドル

于 2013-05-20T05:16:47.073 に答える
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
于 2013-05-20T04:47:27.677 に答える