sql:如何判断一笔单完全满足某个条件

现有链接主从表视图,字段gsbh,cpbm分别是生产单号 产品编码,
现在要判断一笔生产单号是否是纯打模单,即生产单号里的产品编码
全部是'DM'开头,不能有其他的非'DM'开头的产品在里面.
第一步:找出每一单中DM开头的记录数
SELECT gsbh, COUNT(*) AS sl
        FROM pcb
        WHERE cpbm LIKE 'DM%'
        GROUP BY gsbh
第二步:找出每一单中的记录数,只要DM开头的记录数与总记录数相等,表示是纯DM单,即打模单
SELECT gsbh, COUNT(*) AS sl
                 FROM pcb
                 GROUP BY gsbh
第三步,将上面的数据集串联起来,得到纯DM单号,这就是纯打模单单号了,
有了单号,将下面的sql封装成新的视图,取名为vDmOnly
SELECT gsbh
FROM (SELECT gsbh, COUNT(*) AS sl
        FROM pcb
        WHERE cpbm LIKE 'DM%'
        GROUP BY gsbh) a
WHERE EXISTS
          (SELECT gsbh, sl
         FROM (SELECT gsbh, COUNT(*) AS sl
                 FROM pcb
                 GROUP BY gsbh) b
         WHERE a.gsbh = b.gsbh AND a.sl = b.sl)
第四步,得到所有纯打模的单
select * from 订单主从表 where exists (select * from vDmOnly where 订单主从表.gsbh=vDmOnly.gsbh)

总结:第三步没有加限制条件,比如订单日期,因此,记录很多速度会很慢.
posted on 2004-11-07 11:35  wenew  阅读(707)  评论(0编辑  收藏  举报