如何从保存数量的表中同时找到每个月的数量总和?

时间:2013-01-23 09:11:11

标签: sql ms-access

我正在绘制图表,以显示每个产品每个月放置的数量总和。但是因为我的表在“打”中保留了一些,而在“片段”中保留了一些,我不知道如何在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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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

代码返回此结果:

enter image description here