日期:2014-05-17  浏览次数:20413 次

【S】【O】【S】
【问】如何查询判断订单是否完成?

【说明】
每个订单分成几道工序生产,每道工序的生产数量=订单数量,
当订单的每道工序均生产完成,即该订单生产完毕!
比如,表中的订单d1是生产完成的!

【数据表】
订单表
订单号 订单数量
d1 500
d2 800
d3 1000
...

生产进度表
订单号 工序 工序已生产数量
d1 第1道 500
d1 第2道 500
d1 第3道 500
d2 第1道 800
d2 第2道 200
d2 第3道 0
d2 第4道 500
d2 第5道 300
d3 第1道 0
d3 第2道 200
d3 第3道 1000
d3 第4道 1000
...

------解决方案--------------------
SQL code

SELECT * FROM 订单表
WHERE NOT EXISTS(SELECT 订单号 FROM 生产进度表 WHERE 工序已生成数量<>订单表.订单数量)

------解决方案--------------------
SQL code

IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = '订单表')
BEGIN
    DROP TABLE 订单表
END
GO
CREATE TABLE 订单表
(
    订单号 VARCHAR(10),
    订单数量 INT
)
GO
INSERT INTO 订单表
SELECT 'd1', 500 UNION
SELECT 'd2', 800 UNION
SELECT 'd3', 1000
GO
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = '生产进度表')
BEGIN
    DROP TABLE 生产进度表
END
GO
CREATE TABLE 生产进度表
(
    订单号 VARCHAR(10),
    工序 VARCHAR(10),
    工序已生产数量 INT
)
GO
INSERT INTO 生产进度表
SELECT 'd1', '第1道', 500 UNION
SELECT 'd1', '第2道', 500 UNION
SELECT 'd1', '第3道', 500 UNION
SELECT 'd2', '第1道', 800 UNION
SELECT 'd2', '第2道', 200 UNION
SELECT 'd2', '第3道', 0 UNION
SELECT 'd2', '第4道', 500 UNION
SELECT 'd2', '第5道', 300 UNION
SELECT 'd3', '第1道', 0 UNION
SELECT 'd3', '第2道', 200 UNION
SELECT 'd3', '第3道', 1000 UNION
SELECT 'd3', '第4道', 1000
GO
SELECT 订单号,    订单数量, '已完成' AS 订单进度 FROM 订单表 AS A
WHERE NOT EXISTS (SELECT 1 FROM 生产进度表 AS B WHERE A.订单号 = B.订单号 AND A.订单数量 <> B.工序已生产数量)
UNION
SELECT 订单号,    订单数量, '未完成' AS 订单进度 FROM 订单表 AS A
WHERE EXISTS (SELECT 1 FROM 生产进度表 AS B WHERE A.订单号 = B.订单号 AND A.订单数量 <> B.工序已生产数量)

订单号    订单数量    订单进度
d1    500    已完成
d2    800    未完成
d3    1000    未完成