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

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 に答える
1

You can use 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 に答える
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)。

2番目の条件では、このスクリプトが必要です

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 に答える