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

我想要的结果应该是“六月”月份的数量总和

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 回答