我有一个查询,我自己加入一个表来查找零件高度或宽度之间的不匹配。唯一的问题是,由于这个连接,它将为每个部分返回两次未命中匹配。我只想为每次未命中比赛返回一行,而不是两次。
这是表格:
tblTagGlass
JobID varchar
UnitCode varchar
PartCode varchar
PartQty int
TagHeight float
TagWidth float
和查询:
select *
from tblTagGlass ttg
inner join tblTagGlass ttgC ON
ttg.JobID = ttgC.JobID
AND ttg.PartCode = ttgC.PartCode
where ttg.TagHeight != ttgC.TagHeight
or ttg.TagWidth != ttgC.TagWidth
order by ttg.PartCode
和结果:
INC375 U2-052 VT2-011 1 2013 1444.5 INC375 U2-028 VT2-011 1 2012.5 1444.5
INC375 U2-028 VT2-011 1 2012.5 1444.5 INC375 U2-052 VT2-011 1 2013 1444.5
我希望这是有道理的......
答案 0 :(得分:1)
尝试
select *
from tblTagGlass ttg
inner join tblTagGlass ttgC ON
ttg.JobID = ttgC.JobID
AND ttg.PartCode = ttgC.PartCode
where (ttg.TagHeight != ttgC.TagHeight OR ttg.TagWidth != ttgC.TagWidth)
AND ((ttg.TagHeight >= ttgC.TagHeight AND ttg.TagWidth >= ttgC.TagWidth)
OR (ttg.TagHeight > ttgC.TagHeight AND ttg.TagWidth < ttgC.TagWidth))
order by ttg.PartCode
区别在于使用&gt;比较它们而不是!=
答案 1 :(得分:1)
让我们做一个假设:
您正在寻找的是具有相同JobCode和PartCode但具有不同UnitCode值的项目 - 并且TagHeight或TagWidth(或两者)都有所不同。所以,使用'&gt;' UnitCode上的技巧可以区分行并防止重复,但'!='可以检测TagHeight或TagWidth中的差异:
SELECT *
FROM tblTagGlass ttg JOIN tblTagGlass ttgC
ON ttg.JobID = ttgC.JobID
AND ttg.PartCode = ttgC.PartCode
AND ttg.UnitCode > ttgC.UnitCode
WHERE (ttg.TagHeight != ttgC.TagHeight
OR ttg.TagWidth != ttgC.TagWidth)
ORDER BY ttg.PartCode
答案 2 :(得分:-1)
问题变成了,您想从行中获取哪些信息。它们是不同的行。
如果您只想要零件代码,这将有效:
select ttg.PartCode
from tblTagGlass ttg
inner join tblTagGlass ttgC ON
ttg.JobID = ttgC.JobID
AND ttg.PartCode = ttgC.PartCode
where ttg.TagHeight != ttgC.TagHeight
or ttg.TagWidth != ttgC.TagWidth
group by ttg.PartCode
order by ttg.PartCode
除此之外,您还需要确定跨行所需的信息汇总。