1

上司から、2週間ほど経っても解決策がわからないので、可能かどうかわからない課題が出てきたので、SOグループに助けを求めるためにこれを捨てています。これがあなたの脳を壊すならば、私は謝罪します。

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

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

Bob Jones、122 Main Street、Portland、OR
Sue Jones、122 Main Street、Portland、OR
Mary Smith、458 32nd Street、Portland、OR
Ralph Smith、458 32nd Street、Portland、OR

これを機能させて、各アドレスの最初の行のみが次のように返されるようにします。

Bob Jones、122 Main Street、Portland、OR
Mary Smith、458 32nd Street、Portland、OR

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

4

3 に答える 3

5
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、「最初の」項目を定義する列リストを示します。

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

于 2009-09-11T20:05:37.440 に答える
3

SELECT MIN(a.firstname + a.lastname)、アドレスfromxグループ化アドレス。

それは非常に単純な答えですが、それはあなたの主張を理解します。個別のアドレスごとに「小さい」名前のみが返されます。

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

于 2009-09-11T20:04:18.160 に答える