CREATE PROC CHECK_MATERIAL_BY_LEX @ORGID int, @materialNumber varchar(2000) AS BEGIN ;WITH #LEX_MaterialNumber AS( SELECT b.billno --FROM (SELECT CAST(''+REPLACE('41X6129,50X1203,B225X00',',','')+'' AS xml) billno) a FROM (SELECT CAST(''+REPLACE(@materialNumber,',','')+'' AS xml) billno) a OUTER APPLY (SELECT T.C.value('.','varchar(50)') billno FROM a.billno.nodes('/v') AS T(C)) b ) ,#数据处理 AS ( SELECT t1.* FROM #LEX_MaterialNumber tt CROSS APPLY ( SELECT t0.FMATERIALID,t0.FNUMBER,t0_l.FNAME --,tt.billno 'FSPECIFICATION' ,t0_l.FSPECIFICATION ,t1.FNUMBER Unit ,CONCAT('FF',ISNULL(t0ap.FAUXPROPERTYID,0)) AS 'FAUXPROPERTYID' ,CONVERT(int,t0ap.FISENABLE) FISENABLE ,tt.billno LexNumber FROM T_BD_MATERIAL t0 INNER JOIN T_BD_MATERIAL_L t0_l on t0_l.FMATERIALID = t0.FMATERIALID AND t0_l.FLOCALEID = 2052 INNER JOIN T_BD_MATERIALSALE t0s on t0s.FMATERIALID = t0.FMATERIALID INNER JOIN T_BD_UNIT t1 on t1.FUNITID = t0s.FSALEUNITID LEFT JOIN t_BD_MaterialAuxPty t0ap on t0.FMATERIALID = t0ap.FMATERIALID WHERE 1 = 1 AND t0.FUSEORGID = @ORGID --944852 AND (CHARINDEX(tt.billno,t0_l.FNAME) > 0) AND t0.FDOCUMENTSTATUS = 'C' AND t0.FFORBIDSTATUS = 'A' ) t0 PIVOT ( SUM(t0.FISENABLE) FOR t0.FAUXPROPERTYID IN (FF100001,FF100002) ) t1 ) SELECT * FROM ( SELECT t0.LexNumber,COUNT(1) ls FROM #数据处理 t0 GROUP BY t0.LexNumber ) t0 CROSS APPLY ( SELECT t1.FMATERIALID,t1.FNUMBER,t1.FNAME,t1.LexNumber 'FSPECIFICATION' ,t1.Unit,t1.FF100001,t1.FF100002 FROM #数据处理 t1 WHERE t1.LexNumber = t0.LexNumber AND t0.ls = 1 UNION ALL SELECT t1.FMATERIALID,t1.FNUMBER,t1.FNAME,t1.FSPECIFICATION ,t1.Unit,t1.FF100001,t1.FF100002 FROM #数据处理 t1 WHERE t1.LexNumber = t0.LexNumber AND t0.ls > 1 AND (t0.LexNumber = t1.FSPECIFICATION) ) t1 END