日期:2014-05-18  浏览次数:20398 次

急求解决方法
小弟初学,现写了一条语句用来查询:
Select a.BulkCode,a.BulkBatchNo,'' as LotNo,a.ProcessingDate,a.InspectionNo,
b.PH_Result,
b.Viso_Result
From TBKInspectionHeader a Left outer Join
  (
  select a.Inspectionno,a.PH_Result,b.Viso_Result 
  from  
  (Select InspectionNo,Result as PH_Result
  From TBKInspectionLines
  Where Parameter like 'Viscosity%') a 
inner join
(Select InspectionNo,Result as Viso_Result
  From TBKInspectionLines
  Where Parameter like 'Viscosity%' ) b
on a.InspectionNo=b.InspectionNo  
where (a.PH_Result is not null or b.Viso_Result is not Null)
and a.InspectionNo = 'BK20120203001'


  )b on a.InspectionNo=b.InspectionNo
Where a.Status=1
And a.BulkCode = '766735/70'
and a.BulkBatchNo = 'B2012020017'


查询结果如下:
766735/70 B2012020017 2012-02-03 00:00:00.000 BK20120203001 38.000000 38.000000
766735/70 B2012020017 2012-02-03 00:00:00.000 BK20120203001 38.000000 35.000000
766735/70 B2012020017 2012-02-03 00:00:00.000 BK20120203001 35.000000 38.000000
766735/70 B2012020017 2012-02-03 00:00:00.000 BK20120203001 35.000000 35.000000

很明显重复了,然后又试着改了语句,如下:
Select a.BulkCode,a.BulkBatchNo,'' as LOrealLotNo,a.ProcessingDate as PackingDay,a.InspectionNo,b.Result as PH_Result,c.Result as Viso_Result
From TBKInspectionHeader a 
  Left outer Join
  ( Select InspectionNo,Result
  From TBKInspectionLines
  Where Parameter like 'PH%'
  ) b on a.InspectionNo=b.InspectionNo
  Left Outer Join 
  (
  Select InspectionNo,Result
  From TBKInspectionLines
  Where Parameter like 'Viscosity%'
  )c on a.InspectionNo=c.InspectionNo
Where a.Status='1'
And (b.Result is not null or c.Result is not Null)

查询结果还是重复了:
查询结果如下:
766735/70 B2012020017 2012-02-03 00:00:00.000 BK20120203001 38.000000 38.000000
766735/70 B2012020017 2012-02-03 00:00:00.000 BK20120203001 38.000000 35.000000
766735/70 B2012020017 2012-02-03 00:00:00.000 BK20120203001 35.000000 38.000000
766735/70 B2012020017 2012-02-03 00:00:00.000 BK20120203001 35.000000 35.000000

请问有什么好的方法来避免重复吗?


------解决方案--------------------
SQL code

Select DISTINCT a.BulkCode,a.BulkBatchNo,'' as LOrealLotNo,a.ProcessingDate as PackingDay,a.InspectionNo,
b.Result as PH_Result,c.Result as Viso_Result,b.Parameter as PH_Parameter,c.Parameter as Viso_Parameter
From TBKInspectionHeader a 
  Left outer Join
  ( Select InspectionNo,Result,Parameter
  From TBKInspectionLines
  Where Parameter like 'PH%'
  ) b on a.InspectionNo=b.InspectionNo
  Left Outer Join 
  (
  Select InspectionNo,Result,Parameter
  From TBKInspectionLines
  Where Parameter like 'Viscosity%'
  )c on a.InspectionNo=c.InspectionNo
Where a.Status='1'
And (b.Result is not null or c.Result is not Null)
And a.BulkCode = '766735/70'
and a.BulkBatchNo = 'B2012020017'
[color=#FF0000]and RIGHT(b.Parameter,LEN(b.Parameter) - CHARINDEX('-',b.Parameter)) =RIGHT(c.Parameter,LEN(c.Parameter) - CHARINDEX('-',c.Parameter))[/color]