如果列值等于同一个表,则排除行

时间:2013-03-15 10:04:42

标签: sql

 ![TABLE][1]

大家好,

我有一张包含上述记录的表格,每个N_ID可以有2个条目。我只想在满足以下条件的情况下从中获取记录。

比如说

状态列值为1& 2表示N_ID = 2和2& 1表示N_ID = 5,表示状态值不同(即1和2)。

但是如果你看到N_ID = 3,则状态列有1& 1是相同的。

所以我想要不包括具有相同状态值的N_ID的记录(即哪个具有1& 1或2& 2等等)。

在上述情况下,我只想要N_ID = 2,5的记录。

感谢

3 个答案:

答案 0 :(得分:1)

您可以使用EXISTS

SELECT * FROM dbo.TableName t1
WHERE EXISTS(
    SELECT 1 FROM dbo.TableName t2
    WHERE t1.N_ID = t2.N_ID
    AND   t1.Status <> t2.Status
)

答案 1 :(得分:1)

您可以排除每个ID具有多个相同状态的行

 SELECT * 
   FROM TABLENAME tb 
   WHERE tb.N_ID NOT IN (
     SELECT tb.N_ID 
       FROM TABLENAME tb
       GROUP BY tb.N_ID, tb.CONFIG_TYPE, tb.STATUS
       HAVING COUNT(*) > 1)

Table

答案 2 :(得分:0)

使用EXISTS()尝试选项并检查COUNT(*)

SELECT *
FROM dbo.test16 t
WHERE t.Config_Type != 2 AND EXISTS (
              SELECT 1
              FROM dbo.test16 t2
              WHERE t.Networkelemenid = t2.Networkelemenid                
              GROUP BY t2.Networkelemenid, t2.Config_Type
              HAVING COUNT(DISTINCT t2.Status) > 1
              )

此脚本将数据分组到t2.Config_Type。 HAVING COUNT(DISTINCT t2.Status)指定结果集中只能出现唯一的行(例如1,2 = 2; 1,1或2,2 = 1)

对于第二个条件,您需要此脚本

SELECT *
FROM dbo.test41 t
WHERE t.Config_Type != 2 AND EXISTS (
              SELECT 1
              FROM dbo.test41 t2
              WHERE t.Networkelemenid = t2.Networkelemenid                
              GROUP BY t2.Networkelemenid, t2.Config_Type, t2.Status
              HAVING COUNT(t2.Status) > 1
              )

Table

TABLE2

相关问题