2017-10-20 2 views
0

すべてのコード値が一意のIDである651、652、655、656でないすべてのレコードを選択する方法を教えてください。私がいないすべてのコードは、結果のデータセットは以下のようになるID用651/652/655/656の1列値でグループを除外するクエリを選択

あるすべてのレコードを取得する3列

ID Line Code 
1 1 651 
1 2 652 
1 3 655 
2 1 650 
2 2 652 
3 1 651 
3 2 655 
3 3 651 
3 4 658 
4 1 651 
4 2 651 

ソース・テーブル

ID Line Code 
2 1 650 
2 2 652 
3 1 651 
3 2 655 
3 3 651 
3 4 658 

答えて

2

これを試してみてください:

SELECT t1.* 
FROM table1 as t1 
INNER JOIN 
(
    SELECT DISTINCT ID 
    FROM table1 AS t1 
    LEFT JOIN 
    (
    SELECT 651 AS code UNION SELECT 652 UNION 
    SELECT 655 UNION SELECT 656 
) AS t2 ON t1.code = t2.code 
    WHERE t2.code is NULL 
) AS t2 ON t1.id = t2.id; 

demo *(MySQL用のデモが、依然としてSQL Server 2005の同じ)

| ID | Line | Code | 
|----|------|------| 
| 2 | 1 | 650 | 
| 2 | 2 | 652 | 
| 3 | 1 | 651 | 
| 3 | 2 | 655 | 
| 3 | 3 | 651 | 
| 3 | 4 | 658 | 
+0

@RasmusDybkjær - ありがとう、私は私の答えを編集しました。 –

+0

@RasmusDybkjær 'IN()'は2005年には確かに利用可能でした... –

+0

サブクエリ内の条件付き集計は別のオプションになります – Matt

0

ラインアイテムのため、これらの値ではないコードが存在する場所を確認します。 サブクエリを使用してこれを実行できます。例:

DECLARE @temp TABLE (ID int, Line int, Code int) 
INSERT INTO @temp VALUES 
(1, 1, 651),(1, 2, 652),(1, 3, 655),(2, 1, 650),(2, 2, 652),(3, 1, 651) 
,(3, 2, 655),(3, 3, 651),(3, 4, 658),(4, 1, 651),(4, 2, 651) 

SELECT ID, Line, Code 
    FROM @temp T1 
WHERE EXISTS (SELECT * 
       FROM @temp T2 
       WHERE T2.ID = T1.ID 
        AND T2.Code NOT IN (651, 652, 655, 656) 
      ) 
0

ここではINまたはExistsを使用しない方法です。サブクエリで条件付き集計を使用して、不要なコードよりも多くのレコードがIDごとに存在するかどうかを判断し、元のテーブルに戻って詳細を取得します。

DECLARE @Table AS TABLE (ID int, Line INT, Code INT) 

INSERT INTO @Table (ID, Line, Code) 
VALUES (1, 1, 651),(1, 2, 652),(1, 3, 655),(2, 1, 650),(2, 2, 652) 
     ,(3, 1, 651),(3, 2, 655),(3, 3, 651),(3, 4, 658),(4, 1, 651) 
     ,(4, 2, 651) 

SELECT t1.* 
FROM 
    @Table t1 
    INNER JOIN (
     SELECT 
      ID 
     FROM 
      @Table 
     GROUP BY 
      ID 
     HAVING 
      COUNT(*) > COUNT(CASE WHEN Code = 651 OR Code = 652 OR Code = 655 OR Code = 656 THEN Code END)) t2 
    ON t1.ID = t2.ID 
関連する問題