0

作成しようとしているクエリに関する情報を探して、いくつかのアイデアを思いつきましたが、作業するのに十分なほどしっかりしたものはありません。私は何をする必要があるかについての一般的な考えを持っていると思いますが、その小さなプッシュを見逃しているだけですよね?

私がやろうとしているのは、「タイプ」が排他的に1つの値であるレコードのみを取得するクエリを作成し、探しているタイプが複数ある可能性があるレコードを拒否しますが、1つ異なるとセット全体が無効になります。

ちょっとややこしいので、以下に例を示します。

LinkId  LinkType
1234    A
1234    B
1235    A
1236    A
1236    A

LinkType 'A' のレコードに関心があるとします。LinkId に 'A' レコードしかない場合は、それが必要です。いくつかの (1 つでも多くでも構いません) A レコードとその他の値のレコードがある場合は、そのままにしておきます。たとえば、上記の表の例では、ID 1234 はアウトですが、1235 と 1236 は有効です。

今、私は次のようなことができることを知っています

SELECT LinkId, LinkType
FROM dbo.ExampleTable
GROUP BY LinkId, LinkType

テーブルを次のようなものに折りたたむ

LinkId  LinkType
1234    A
1234    B
1235    A
1236    A

しかし、私は立ち往生しています。ここでHAVING句を使用する必要があると考えており、行数を確認するために COUNT などを使用する必要があると思われますが、ピースをまとめることができないようです。

何を検索するかについてのヒントやコメントはありますか?

4

1 に答える 1

2

T-SQL

SELECT *
FROM ExampleTable
WHERE LinkID NOT IN 
(
    SELECT LinkID
    FROM ExampleTable
    WHERE LinKType != 'A'
)

あなたがやりたいことをする必要があります。したがって、タイプAではないLinkIDのリストを取得してから、その前の選択に含まれていないLinkIDのリストを取得します(したがって、Asのみが表示されます)

LinkIDでグループ化するとLinkTypeに関する情報が失われるため、Group Byを実行することはできません。したがって、SubQueryが唯一の方法です(この状況では最も明確です)。

于 2011-09-19T16:17:41.697 に答える