2016-11-14 8 views
0

私はそれについて多くを検索しましたが、私の問題に関する関連情報は見つかりませんでした。私はこのようなデータセットを持っています。SQL内の同じテーブルIDと異なる値を選択してください

Column1 Column2 
    A   B  
    A   B 
    A   C 
    X   B 
    X   B 
    Y   C 
    Y   B 
    T   A 
    T   A 
    T   A 

私は、発生回数の合計で1を区別できます。しかし、私は実際には定数の行を削除したい。クエリを実行すると、結果は次のようになります。

Column1 Column2 
    A   B  
    A   B 
    A   C 
    Y   C 
    Y   B 

上記のように、AとYはColumn2で異なる値を持ちます。これをどのように問い合わせますか?私はあなたがあなたのそれぞれのペアのリストを与えるとどのように頻繁にそれが起こるだろう何

SELECT ColumnA, ColumnB, count(*) 
FROM [source] 
GROUP BY ColumnA, ColumnB 

を行う前に、ペアの出現箇所をカウントしたいSql Server 2014

+0

あなたがしたいそこからWHERE .. INのステートメントを使用して、元のデータでColumnAのそれらの値を探したいです列1の値が列2に1つの値しか持たない行を削除しますか?彼らが複数の列2の可能性を持っている場合、それらを残したいですか? – Fritz

+0

はい。それが正確に私が照会したいものです。 –

答えて

1

を使用しています。あなたが探しているColumnA値のリストが表示されます

SELECT ColumnA, count(*) 
FROM 
    (
    SELECT ColumnA, ColumnB, count(*) 
    FROM [source] 
    GROUP BY ColumnA, ColumnB 
    ) 
GROUP BY ColumnA 
HAVING count(*) > 1 

:次はColumnA内の各値を持っているどのように多くのペア数え、そして唯一の選択肢を持つものをカットします。

SELECT ColumnA, ColumnB 
FROM [source] 
WHERE ColumnA IN 
    (
    SELECT ColumnA, count(*) 
    FROM 
     (
     SELECT ColumnA, ColumnB, count(*) 
     FROM [source] 
     GROUP BY ColumnA, ColumnB 
     ) 
    GROUP BY ColumnA 
    HAVING count(*) > 1 
    ) 
+0

ありがとうフリッツ。 SQL Server用のいくつかの構成で、私はそれを作ることができました。 –

1

COUNT(DISTINCT ...)CTEで動作するかもしれません:

; WITH CTE AS (
    SELECT Column1 
    FROM [my_table] 
    GROUP BY Column1 
    HAVING COUNT(DISTINCT Column2) > 1 
) 
SELECT t.* 
FROM [my_table] t 
JOIN CTE ON CTE.Column1 = t.Column1; 
+0

ありがとうジョン。あなたのソリューションも機能しました。 –

関連する問題