当前位置: 代码迷 >> Sql Server >> 关于"冲红"数据,请高手指教解决方案
  详细解决方案

关于"冲红"数据,请高手指教解决方案

热度:658   发布时间:2016-04-27 15:58:05.0
关于"冲红"数据,请高手指教
TAZS
TAZS 2030.12 接头2030.12   PZ SET CIN-06-0055 来料验收入库 增 2006-12-22   13:03:24.000 80.00 .00 TAZS
TAZS 2030.12 接头2030.12   PZ SET CIN-06-0103 来料验收入库 增 2006-12-22   13:03:50.000 12.00 .00 TAZS
TAZS 7866-03 针织7866-03 PCS CIN-06-0001 来料验收入库 增 2006-11-08   15:44:01.000 11472.00 .00 TAZS
TAZS 7866-03 PCS OU060012 其他出库单 减 2006-10-27   18:56:15.000 .00 11472.00 TAZS
TAZS 7866-03 针织   7866-03 PCS CIN-06-0001 来料验收入库 减 2006-11-11   14:19:21.000 .00 11472.00

------解决方案--------------------
你的进销存表没有主键吗?你的第一条记录和第四条记录完全一样.
因为你没有主键只能这样查:
select distinct A.WareHId,A.Itemid,A.inQty,A.outQty,B.inQty,B.outQty,A.Billid,A.Iostyle,A.comm from inviolog A inner join inviolog B on
A.corpcode=B.corpcode and A.warehid=B.WareHid and A.Itemid=B.Itemid
and charindex(A.iostyle,B.iostyle)> 0 and a.inqty=b.Outqty and A.billid=B.Billid and ((A.ioflag= '增 ' and B.ioflag= '减 ') or (A.ioflag= '减 ' and B.ioflag= '增 '))
这样查出来的应该是需要冲红的记录.
如果有主键就好办了.

------解决方案--------------------
设置个联合主键不行吗
------解决方案--------------------
LZ,你把表结构贴出来啊

光看你的SELECT语句太抽象了

------解决方案--------------------
建立扩展你的表结构吧,将红冲和被红冲记录做一个标记flag,查询不就好办了
------解决方案--------------------
SELECT *
FROM table1 a
WHERE NOT EXISTS
(SELECT 1
FROM table1 b
WHERE b.单据编号=a.单据编号
AND b.单据类别=
CASE a.单据类别
WHEN '来料验收入库 ' THEN '来料验收入库(反审核) '
WHEN '其他出库单 ' THEN '其他出库单(反审核) '
END
AND b.出入标志=
CASE a.出入标志
WHEN '增 ' THEN '减 '
WHEN '减 ' THEN '增 '
END
AND b.入库数=a.出库数
AND b.出库数=a.入库数)
  相关解决方案