当前位置: 代码迷 >> Sql Server >> 【S】【O】【S】,该如何解决
  详细解决方案

【S】【O】【S】,该如何解决

热度:34   发布时间:2016-04-27 11:24:13.0
【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 订单表ENDGOCREATE TABLE 订单表(    订单号 VARCHAR(10),    订单数量 INT)GOINSERT INTO 订单表SELECT 'd1', 500 UNIONSELECT 'd2', 800 UNIONSELECT 'd3', 1000GOIF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = '生产进度表')BEGIN    DROP TABLE 生产进度表ENDGOCREATE TABLE 生产进度表(    订单号 VARCHAR(10),    工序 VARCHAR(10),    工序已生产数量 INT)GOINSERT INTO 生产进度表SELECT 'd1', '第1道', 500 UNIONSELECT 'd1', '第2道', 500 UNIONSELECT 'd1', '第3道', 500 UNIONSELECT 'd2', '第1道', 800 UNIONSELECT 'd2', '第2道', 200 UNIONSELECT 'd2', '第3道', 0 UNIONSELECT 'd2', '第4道', 500 UNIONSELECT 'd2', '第5道', 300 UNIONSELECT 'd3', '第1道', 0 UNIONSELECT 'd3', '第2道', 200 UNIONSELECT 'd3', '第3道', 1000 UNIONSELECT 'd3', '第4道', 1000GOSELECT 订单号,    订单数量, '已完成' AS 订单进度 FROM 订单表 AS AWHERE NOT EXISTS (SELECT 1 FROM 生产进度表 AS B WHERE A.订单号 = B.订单号 AND A.订单数量 <> B.工序已生产数量)UNIONSELECT 订单号,    订单数量, '未完成' AS 订单进度 FROM 订单表 AS AWHERE EXISTS (SELECT 1 FROM 生产进度表 AS B WHERE A.订单号 = B.订单号 AND A.订单数量 <> B.工序已生产数量)订单号    订单数量    订单进度d1    500    已完成d2    800    未完成d3    1000    未完成
  相关解决方案