2016-06-21 4 views
0

3つの異なる列に表示される可能性のある値を集計しようとしていますが、 Microsoft SQL。 例値Xは列A、B、Cまたは3つすべてに表示されるかもしれませんが、どの列に関係なく値Xのユニークな数しか得られないようにする必要があります。異なる列に表示される可能性のある一意の値の数を選択します。

ありがとうございます!

+1

明確にするために、あなたが求めています列A、B、またはCの少なくとも1つにXが含まれる行数のカウント?列Aと列Bの両方にXが含まれている行をダブルカウントするのは問題ですか? –

+0

期待される出力を持つサンプルテーブルを含めることができますか? –

答えて

0

これはあなたが探しているものですか?これは関係なく、それが中に発見されたどのように多くの列の行ごとに1つだけの発生をカウントします。

SELECT 
    ID 
    ,SUM(CASE WHEN ColA = 'X' OR ColB = 'X' OR ColC = 'X' THEN 1 ELSE 0 END) AS ValueCount 
FROM 
    TABLENAME 
GROUP BY 
    ID 

を、私はあなたがグループ化を指定していないので、私はあまりにもして、グループなしでそれを表示する必要がありますね。

SELECT 
    ,SUM(CASE WHEN ColA = 'X' OR ColB = 'X' OR ColC = 'X' THEN 1 ELSE 0 END) AS ValueCount 
FROM 
    TABLENAME 
0

あなたが内の任意のAB、またはCXの個々の発生をカウントするようにしたい場合は、次のように動作するはずです:

SELECT 
    SUM(CASE WHEN A = 'X' THEN 1 ELSE 0 END) + 
    SUM(CASE WHEN B = 'X' THEN 1 ELSE 0 END) + 
    SUM(CASE WHEN C = 'X' THEN 1 ELSE 0 END) 
FROM yourTable 
+0

ありがとうございます。最終的には、数百万の個々の「X」があり、それらのすべてを独自にカウントする必要があるため、どこでも「X」を指定することはできません。私はテーブルを手にする必要はありませんが、公開鍵について話していると仮定しましょう。ただし、この場合、各キーは、ブロックa、ブロックb、ブロックcのいずれか、または3つのキーのいずれかに存在する可能性があります。私はそれぞれのキーが一度だけ数えられるようにしたい。おそらく、私が一意の鍵の総数しか持っていない方が簡単かもしれません。うまくいくのは、ブロックの下に表示されているキーの数を後で分割することです。キーの名前を表示する必要はなく、カウントだけです。 –

+0

私は複数の列にまたがって異なる選択カウントが必要だと思います。 –

+0

@FlorenceGoyサンプル入力と出力を見てください。 –

関連する問題