1
 ![TABLE][1]

大家好,

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

比如说

N_ID = 2 的状态列值为 1 和 2,N_ID = 5 的状态列值为 2 和 1,这意味着状态值不同(即 1 和 2 两者)。

但是,如果您看到 N_ID=3,则 Status 列有 1 和 1,它们是相同的。

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

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

谢谢

4

3 回答 3

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
)
于 2013-03-15T10:09:36.557 回答
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)

桌子

于 2013-03-15T10:19:49.420 回答
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
              )

桌子

表2

于 2013-03-15T10:34:25.727 回答