Я рассчитал ежедневную цифру, которая объединяет все цифры, введенные для каждого имени, поэтому у меня есть повторяющиеся строки под каждым именем. Я хочу, чтобы результаты показывали только один результат для каждого пользователя, поэтому я решил, что лучше использовать разные. Тем не менее, мне также нужно отобразить результаты по убыванию цифры. Возможно ли это сделать в том же заявлении?

    SELECT DISTINCT
    D.DATE, 
    COALESCE( M.[Team ADJ],D.[Team ADJ], M.[Name]) AS 'Sales Person',
    COALESCE( D.[Team], M.[Team]) AS 'Sales Team',
    isnull(D.[Daily Figure],0) AS [Daily Figure],

    FROM  
    [Daily] D
    FULL OUTER JOIN
    [Month] M ON D.[Name] = F.[Name]
    ORDER BY [Daily Figure] DESC

Текущие результаты

 Date       Sales Person    Sales Team     Daily Figure    Month 
 2017-09-19     FRED         SAM               20           285
 2017-09-19     FRED         SAM               20           285
 2017-09-19     FRED         SAM               20           285
 2017-09-19     TOM          BEN               140          118
 2017-09-19     TOM          BEN               140          118

ОШИБКА: «Элементы ORDER BY должны отображаться в списке выбора, если указан параметр SELECT DISTINCT». Хотя я включил его в список выбора

1
Ryan Gadsdon 20 Сен 2017 в 15:31

3 ответа

Лучший ответ

Лучший способ решить эту проблему - упорядочить по номеру столбца. НАПРИМЕР. Если столбец находится в 4-й позиции «порядок на 4»

SELECT DISTINCT 
COALESCE( M.[Team ADJ],D.[Team ADJ], M.[Name]) AS 'Sales Person',
COALESCE( D.[Team], M.[Team]) AS 'Sales Team',
isnull(D.[Daily Figure],0),

FROM  
[Daily] D
FULL OUTER JOIN
[Month] M ON D.[Name] = F.[Name]
ORDER BY 4 DESC
0
Ryan Gadsdon 20 Сен 2017 в 14:17

В разделе order by вы можете ссылаться на столбец по его псевдониму, например:

select distinct 
    [Date]
  , coalesce( M.[Team adj],D.[Team adj], M.[Name]) as [Sales Person]
  , coalesce( D.[Team], M.[Team]) as [Sales Team]
  , isnull(D.[Daily Figure],0) as [Daily Figure]
  , [Month]
from  [Daily] D
  full outer join [Month] M 
    on D.[Name] = F.[Name]
order by [Daily Figure] desc

select distinct
    t.Date, 
    [Sales Person],
    [Sales Team],
    isnull(t.[Daily Figure],0) AS [Daily Figure]
from t
order by [Daily Figure] desc

Демонстрация rextester: http://rextester.com/PVPHSR35614

Возвращает :

+------------+--------------+------------+--------------+
|    Date    | Sales Person | Sales Team | Daily Figure |
+------------+--------------+------------+--------------+
| 2017-09-19 | tom          | ben        |          140 |
| 2017-09-19 | fred         | sam        |           20 |
+------------+--------------+------------+--------------+
1
SqlZim 20 Сен 2017 в 15:17

Пример запроса не сгенерировал текущие результаты, которые вы опубликовали.

В отдельном заказе, столбец заказа должен быть частью набора результатов. В вашем примере запроса нет столбца с именем Daily Figure. Если бы Daily Figure использовался без выражения, Order By работал бы нормально. Однако, как только вы заключите его в выражение, оно больше не будет называться Daily Figure.

Самое простое решение - псевдоним столбца.

, isnull(D.[Daily Figure],0) as [Daily Figure]

* Обновление *

Вот фрагмент кода, который вы можете запустить на любом сервере SQL Server, показывающий действие «Отдельный заказ» в действии.

SELECT DISTINCT
            t.type_desc,
            CAST(t.create_date AS DATE) AS Created
  FROM      sys.tables AS t
  ORDER BY  Created
;
0
Wes H 20 Сен 2017 в 14:04