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