質問

上司が私に割り当てを与えてくれました。約2週間後、解決策が分からないので、私はそれが可能かどうか分かりません。グループ。これがあなたの脳を壊すなら、私は謝ります。

最初に少しの背景:ユーザーがSQLを知らなくてもデータベースから必要なものを取り戻すことができるデータベースクエリアプリケーションを開発します。

私の問題:「個別」の方法をカスタマイズしたい選択が使用されます。選択した行に個別のキーワードを適用する代わりに、特定のフィールドのみに適用して、フィールドに一致する最初の行が使用されるようにします。例:

ボブ・ジョーンズ、122 Main Street、ポートランド、オレゴン州
スー・ジョーンズ、122 Main Street、ポートランド、オレゴン州
Mary Smith、458 32nd Street、ポートランド、オレゴン州
ラルフ・スミス、458 32nd Street、ポートランド、オレゴン州

次のように各住所の最初の行のみが返されるように、これが機能するようにします。

ボブ・ジョーンズ、122 Main Street、ポートランド、オレゴン州
メアリー・スミス、458 32nd Street、ポートランド、オレゴン州

通常の個別の場合、4行すべてが返されますが、これは必要以上です。私たちがこれをどのように行うことができるかについて、誰にもアイデアがありますか?ありがとう。

役に立ちましたか?

解決

WITH NumberedRows AS (
   SELECT FirstName, LastName, Address,
          ROW_NUMBER() OVER (PARTITION BY Address ORDER BY Id) as RowNumber
   FROM Table
) SELECT FirstName, LastName, Address
  FROM NumberedRows
  WHERE RowNumber = 1;

PARTITION BY Address はグループ化する列リストを指定し、 ORDER BY ID は「最初」を定義する列リストを示します。アイテム付き。

(前のステートメントがセミコロンで終了していることを確認してください。)

他のヒント

通常の" SELECT DISTINCT"を実行する必要があります。実際に行うフィールドのみを照会するSQLステートメント。次に、それらを取得したら、一致するデータを持つTOP 1レコードを取得する別のクエリを実行して、区別できないフィールドを取得します。現時点では、1つのSQLステートメントでこれを行う方法がわかりません...

SELECT MIN(a.firstname + a.lastname)、アドレスfrom x Group By address。

これは非常に単純な答えですが、それはあなたの主張を理解させるものです。 " lesser"のみが返されます。個別の住所の名前。

区別するためにもフィールド連結を使用する必要がありますが、必要なものが得られます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top