如何查询判断订单是否完成?订单表
订单号 订单数量
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
...

解决方案 »

  1.   

    假设:某订单生产数最小的工序的生产数=订单的订单数量,即为订单完成SQL Server 2008R2的用例,供参考DECLARE @订单表 TABLE
    (
    订单号 nvarchar(20)
       ,订单数量 int
    )DECLARE @生产进度表 TABLE
    (
    订单号 nvarchar(20)
       ,工序 nvarchar(20)
       ,工序已生产数量 int
    )INSERT INTO @订单表
    SELECT 'd1',500 UNION ALL
    SELECT 'd2',800 UNION ALL
    SELECT 'd3',1000INSERT INTO @生产进度表
    SELECT 'd1','第1道',500 UNION ALL
    SELECT 'd1','第2道',500 UNION ALL
    SELECT 'd1','第3道',500 UNION ALL
    SELECT 'd2','第1道',800 UNION ALL
    SELECT 'd2','第2道',200 UNION ALL
    SELECT 'd2','第3道',0 UNION ALL
    SELECT 'd2','第4道',500 UNION ALL
    SELECT 'd2','第5道',300 UNION ALL
    SELECT 'd3','第1道',0 UNION ALL
    SELECT 'd3','第2道',200 UNION ALL
    SELECT 'd3','第3道',1000 UNION ALL
    SELECT 'd3','第4道',1000--查询所有订单数量=生产数最小工序的生产数的订单
    SELECT * 
      FROM @订单表 AS 订单表
        JOIN (
    SELECT 订单号
      ,MIN(工序已生产数量) AS 最小工序生产数量 
      FROM @生产进度表
     GROUP BY 订单号
    ) AS 最小工序生产数表
      ON 订单表.订单号=最小工序生产数表.订单号 
     AND 订单表.订单数量=最小工序生产数表.最小工序生产数量
      

  2.   

    DECLARE @订单表 TABLE
    (
        订单号 nvarchar(20)
       ,订单数量 int
    )DECLARE @生产进度表 TABLE
    (
        订单号 nvarchar(20)
       ,工序 nvarchar(20)
       ,工序已生产数量 int
    )INSERT INTO @订单表
        SELECT 'd1',500 UNION ALL
        SELECT 'd2',800 UNION ALL
        SELECT 'd3',1000INSERT INTO @生产进度表
        SELECT 'd1','第1道',500 UNION ALL
        SELECT 'd1','第2道',500 UNION ALL
        SELECT 'd1','第3道',500 UNION ALL
        SELECT 'd2','第1道',800 UNION ALL
        SELECT 'd2','第2道',200 UNION ALL
        SELECT 'd2','第3道',0 UNION ALL
        SELECT 'd2','第4道',500 UNION ALL
        SELECT 'd2','第5道',300 UNION ALL
        SELECT 'd3','第1道',0 UNION ALL
        SELECT 'd3','第2道',200 UNION ALL
        SELECT 'd3','第3道',1000 UNION ALL
        SELECT 'd3','第4道',1000
    select * from @订单表 a 
    where not exists(select * from @生产进度表 where 订单号=a.订单号 and 工序已生产数量<>a.订单数量)
         and exists(select * from @生产进度表 where 订单号=a.订单号)
      

  3.   

    各位师兄,抱歉是我没讲清楚。要求应该是:如何查询判断订单是否完成或者未完成?希望查询结果如下:
    订单号 订单数量 订单进度
    d1 500       完成
    d2 800       未完成
    d3 1000      未完成
    ...
      

  4.   


    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 未完成
      

  5.   

    非常感谢各位师兄帮助解答!!!
    小弟学习了各位师兄的指点后,完成解决方案。
    可以结贴了,得到各位师兄帮助,小弟非常开心,且感激!这是方案代码,与大家分享学习。
    select *,(case when EXISTS (select * from 工序生产表 where 工序生产表.id=订单表.id and 工序生成表.各工序产量!=订单表.数量) then '订单未完成' else '完成' end) as '订单进度' from 订单表