查询以获取3列中具有相同值且1

时间:2018-05-04 07:29:19

标签: sql sql-server

我有一个包含大量数据的表,我需要获取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

通过这个查询,我得到了它:

Result

但我想只在Origin列不相同的情况下才能得到它。我的意思是,在这个结果中我想得到除了第6行和第7行之外的所有内容,因为IdMod,TableName和FieldName匹配,但是Origin也匹配。同样的道理,我不想要第8行和第9行。 但是,我想要第3,4和5行,因为它们中至少有一个具有不同的Origin。当然,我想要1和2因为Origin不同。

我该怎么做?

1 个答案:

答案 0 :(得分:5)

我认为您可以通过检查列Origin

来改进子查询bb
SELECT IdMod, TableName, FieldName 
FROM Process
GROUP BY  IdMod, TableName, FieldName
HAVING COUNT(*) > 1 AND COUNT(DISTINCT Origin) > 1