Вопрос

Мой начальник дал мне назначение, в котором я не уверен, что это возможно, так как примерно через две недели я не могу найти решение, поэтому я выбрасываю это, чтобы попросить любую помощь от SO группа. Если это сломает ваш мозг, я прошу прощения.

Сначала немного предыстории: мы разрабатываем приложение для запросов к базе данных, которое позволяет пользователям получать все, что они хотят, из базы данных, не зная SQL.

Моя проблема: мы хотим настроить " Отличительный " выбор используется. Вместо того, чтобы ключевое слово применимо к выбранным строкам, мы хотим, чтобы оно применялось только к определенным полям, чтобы использовались первые строки, соответствующие этим полям. Для примера:

Боб Джонс, 122 Мэйн Стрит, Портленд, Орегон
Сью Джонс, 122 Main Street, Портленд, Орегон
Мэри Смит, 458 32-я улица, Портленд, Орегон
Ральф Смит, 458 32-я улица, Портленд, Орегон

мы хотим, чтобы это работало так, чтобы только первые строки для каждого адреса возвращались следующим образом:

Боб Джонс, 122 Мэйн Стрит, Портленд, Орегон
Мэри Смит, 458 32-я улица, Портленд, Орегон

При нормальном отличном состоянии будут возвращены все четыре строки, что больше, чем мы хотим. У кого-нибудь есть идеи относительно того, как мы можем это сделать? Спасибо.

Это было полезно?

Решение

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 указывает список столбцов, который вы определили как " first " элемент с.

(убедитесь, что предыдущий оператор завершается точкой с запятой.)

Другие советы

Вы должны регулярно запускать " SELECT DISTINCT " SQL-оператор, который запрашивает только те поля, которые на самом деле должны быть разными. Затем, как только вы их вернете, запустите другой запрос, который берет запись TOP 1 с соответствующими данными, чтобы получить не отличимые поля. На данный момент я не вижу способа сделать это с помощью одного оператора SQL ...

ВЫБЕРИТЕ МИН (a.firstname + a.lastname), адрес от x Группировать по адресу.

Это слишком упрощенный ответ, но он помогает понять вашу точку зрения. он вернет только «меньшее» имя для каждого отдельного адреса.

Вам также понадобится использовать конкатенацию полей, чтобы сделать различия, но это даст вам то, что вам нужно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top