2016-07-03 6 views
-2

SQL照会でHouseNameという名前の重複を排除することによって、C#コードを少し保存しようとしています。私はGROUP BY句を使用する必要があると思います。なぜなら、存在する複製の数を欲しいからです。私は9つのフィールドを引っ張っていますが、そのうちの1つだけが集合体です。しかし、私はまた、各行のプライマリキーを取得したい。これをGROUP BYのステートメントに含めると、IDは明らかに異なるので、もはやHouseNameの別個のデータを取得しません。ここではどのような作品の抜粋です:GROUP BY別のレコードを与えない

SELECT HouseName, COUNT (HouseName) AS numRuns, PrimaryVideoSource, EventType 
From... 
GROUP BY HouseName, PrimaryVideoSource, EventType 

私はグループ化では、これらの最後の2つのフィールドが含まれていない場合、それはエラーがスローされますが、これは、動作します。それでは、非集約フィールドをGROUP BYに含める必要があります。

しかし、私は主キーを引っ張るしたい場合は、ここではその文だ:

SELECT HouseName, COUNT (HouseName) AS numRuns, PrimaryVideoSource, EventType, EventUniqueID 
From... 
GROUP BY HouseName, PrimaryVideoSource, EventType, EventUniqueID 

今私は主キーを取得していないんだけど、私はもはや明確なHouseNamesを取得しています。私は重複を取り戻している。

GROUP BYステートメントを使用して別のHouseNameフィールドを失うことなくプライマリキーを含めるにはどうすればよいですか?

私はCount(HouseName)を手放すことをあきらめて、DISTINCTというステートメントを使用しますが、カウントを保持するのが良いでしょう。試したときに別のエラーメッセージが表示されたようですとにかく

+0

これに関するサンプル入力と出力は何ですか?予想される結果を100%理解しているかどうかはわかりません。 –

+0

プライマリキーによるグループのカウントは毎回1になります – Paparazzi

+1

2つの異なる 'EventUniqueID'を持つ同じ' HouseName'を持つ場合、どのEventUniqueIDを選択しますか?あなたは両方を持つことはできませんし、ユニークなリストを持っていることはできません –

答えて

0

私たちは、あなたが、階層的な結果を取得することができなくなります...私の理解に基づいて、

を偉大な答えを与えるためにいくつかのサンプルの入力と出力を確認する必要がありますが、開始とよ私はあなたがこのようにSQLを探していると信じています。

各セット内の各行のIDが必要な場合は、おそらくC#でそれを行うだけです。いくつかの帯域幅の最適化があるかもしれませんが、それらが価値があるとは思わないでしょう。

この問題は、SQLに「リスト」列タイプがないことに起因しています。それはそれが意味するものではありません。すべてのセルにはスカラー値が含まれている必要があるため、主キーのコレクションを返すことは不可能です。

私はこれがあなたが望むものではないと仮定していますが、この作業をするためにIDを集計関数にラップする必要があります。あなただけの「最初」のレコードをお知りになりたい場合は、あなたがMINを使用することができます。あなたがC#で物事を処理している場合

SELECT HouseName 
    , COUNT (HouseName) AS numRuns 
    , PrimaryVideoSource 
    , EventType 
    , MIN(EventUniqueID) ToKeep 
FROM ... 
GROUP BY HouseName, PrimaryVideoSource, EventType, EventUniqueID 

別のオプション、超便利ではないが、すべてのレコードを含めることですが、また含ま各セットに含まれる数のカウント。

SELECT HouseName 
    , COUNT(*) OVER (PARTITION BY HouseName, PrimaryVideoSource, EventType) numRuns 
    , PrimaryVideoSource 
    , EventType 
    , EventUniqueID 
FROM ...