

お世話になってます。

IDと日付と連番が同じでコードが1234と1235のデータを取得したいと考えています。

tableA  
ID 日付 連番 コード  
1 20060223 1 1234  
1 20060223 1 1235

[code]

    1    20060415     1     1111
    
    1    20060415     3     1234
    1    20060415     3     1235
    
    1    20060415     3     1111
    
    
    
    2    20060415     1     5555
    
    2    20060415     1     1234
    3    20060415     1     1235
    
    4    20060415     2     1235
    4    20060415     3     1235
    
    4    20060417     1     1234
    4    20060417     1     1235
    
    6    20060415     1     1111
    
    6    20060415     1     1234
    6    20060415     1     1235
    
    6    20060415     1     2345
    6    20060415     1     5555
    
    期待値
    
    1    20060223     1     1234
    1    20060223     1     1235
    
    1    20060415     3     1234
    1    20060415     3     1235
    
    4    20060417     1     1234
    4    20060417     1     1235
    
    6    20060415     1     1234
    6    20060415     1     1235
    
[/code]

環境  
sql server 2008 R2  
linqでの取得方法も併せてご教授いただけると幸いです。  
よろしくお願いします。


CC BY-SA 3.0
2017-02-23T09:43:47.263
32900
2017-02-23T10:38:36.813
19310
question
c# sql linq
SQLについてご教授お願いします


まず _IDと日付と連番が同じ_ という条件があるので、これらの項目でグループ化する必要があります。  
各グループが条件を満たしているかどうかの判定はこの場合`WHERE コード IN ('1234',
'1235')`とコードを制限した後、各グループの件数を`COUNT(DISTINCT
コード)`で確認して2種類のコードが取得されていればいいのではないかと思います。  
ですのでグループのキーを取得するSQLは以下のようになります。

[code]

    SELECT ID, 日付, 連番
      FROM tableA
     WHERE コード IN ('1234', '1235')
     GROUP BY ID, 日付, 連番
     HAVING COUNT(DISTINCT コード) = 2
    
[/code]

このSELECT文を副問い合わせに使用して`JOIN`や`IN`、`EXISTS`と組み合わせれば目的のSQLを実現することができます。  
例えば`INNER JOIN`を使用した場合は

[code]

    SELECT *
      FROM tableA t
     INNER JOIN
    (
        SELECT ID, 日付, 連番
          FROM tableA
         WHERE コード IN ('1234', '1235')
         GROUP BY ID, 日付, 連番
         HAVING COUNT(DISTINCT コード) = 2
    ) k ON t.ID = k.ID AND t.日付 = k.日付 AND t.連番 = k.連番
     WHERE コード IN ('1234', '1235')
    
[/code]

のようになります。  
LINQでの実装も同じ方針で実現可能です。


CC BY-SA 3.0
2017-02-23T10:38:36.813
32902
2017-02-23T10:38:36.813
5750
32900
answer