我有一个包含大量数据的表,我需要获取IdMod,TableName和FieldName列在2行或更多行中匹配的行。
查询:
SELECT DISTINCT aa.Id, aa.IdMod, aa.TableName, aa.FieldName, aa.OldValue, aa.NewValue, aa.Origin, aa.Destination, aa.CreationDate, aa.Discard
FROM Process aa
INNER JOIN (
SELECT IdMod, TableName, FieldName
FROM Process
GROUP BY IdMod, TableName, FieldName
HAVING COUNT(*) > 1
) bb
ON aa.IdMod = bb.IdMod AND aa.TableName = bb.TableName AND aa.FieldName = bb.FieldName
WHERE Destination='All' OR Destination=@dest OR Origin=@dest
ORDER BY IdMod,TableName, FieldName
通过这个查询,我得到了它:
但我想只在Origin列不相同的情况下才能得到它。我的意思是,在这个结果中我想得到除了第6行和第7行之外的所有内容,因为IdMod,TableName和FieldName匹配,但是Origin也匹配。同样的道理,我不想要第8行和第9行。 但是,我想要第3,4和5行,因为它们中至少有一个具有不同的Origin。当然,我想要1和2因为Origin不同。
我该怎么做?
答案 0 :(得分:5)
我认为您可以通过检查列Origin
来改进子查询bb
SELECT IdMod, TableName, FieldName
FROM Process
GROUP BY IdMod, TableName, FieldName
HAVING COUNT(*) > 1 AND COUNT(DISTINCT Origin) > 1