1

各月に各製品が配置された数量の合計を示すグラフのプロットに取り組んでいます。しかし、私のテーブルは「ダース」と「ピース」の数量を保持していたため、SQLでこの合計を作成する方法がわかりません。ですから、親切に私を助けていただけませんか。どうもありがとうございました。

以下は私のテーブルとデータサンプルです...

tbl_order
od_id | pd_id | od_qty | od_qty_unit | showndate
  01  |  01   |   1    |  dz         |   12/6/12
  02  |  01   |   1    |  pcs        |   13/6/12
  03  |  01   |   2    |  dz         |   15/6/12
  04  |  02   |   3    |  dz         |   15/6/12
  05  |  03   |   10   |  pcs        |   18/6/12
  06  |  01   |   3    |  dz         |   1/8/12

私が望む結果は、「6月」の月のみからの数量の合計でなければなりません

pd_id | od_qty
  01  |  37
  02  |  36
  03  |  10
4

2 に答える 2

1

MS Access SQL では、IIF を使用します。

SELECT tbl_order.pd_id, 
       Sum(IIf([od_qty_unit]='dz',[od_qty]*12,[od_qty])) AS Qty
FROM tbl_order
GROUP BY tbl_order.pd_id;
于 2013-01-23T10:13:23.770 に答える
0

私はMS-Accessであまり仕事をしていませんが、これがMSSQLでそれを解決する方法です。私の知る限り、構文は非常に似ています(MSSQLに存在する一部のキーワードがアクセスに含まれていない)ので、うまくいくことを願っています。他に何もなければ、それはあなたがそれをどのように解決することができるかについてあなたに手がかりを与えるかもしれません。

一般的な考え方は、「実際の」数量のアイテムを含む列を作成することです。これを行うには、CASEスイッチを使用します。このスイッチでは、単位に応じて、必要な倍数を掛けることができます。1ダースは1*12アイテムです。

DECLARE @data TABLE
(
    od_id int,
    pd_id int,
    od_qty int,
    od_qty_unit NVARCHAR(3),
    showndate DATE
)

INSERT INTO @data VALUES(1,1,1,'dz', '2012-06-12')
INSERT INTO @data VALUES(2,1,1,'pcs', '2012-06-13')
INSERT INTO @data VALUES(3,1,2,'dz', '2012-06-15')
INSERT INTO @data VALUES(4,2,3,'dz', '2012-06-15')
INSERT INTO @data VALUES(5,3,10,'pcs', '2012-06-18')
INSERT INTO @data VALUES(6,1,3,'dz', '2012-08-1')


SELECT 
    pd_id, 
    SUM(d.RealQuantity) 
FROM 
    (
        SELECT 
            pd_id,
            od_qty,
            od_qty_unit,
            CASE 
                WHEN od_qty_unit = 'pcs' THEN od_qty
                WHEN od_qty_unit = 'dz' THEN od_qty * 12
            END AS RealQuantity
        FROM @data 
        WHERE
            MONTH(showndate) = 6
            AND YEAR(showndate) = 2012
    ) AS d
GROUP by pd_id

コードは次の結果を返します。

ここに画像の説明を入力してください

于 2013-01-23T09:28:07.587 に答える