2017-09-20 29 views
1

我計算了一個每日數字,彙集了在每個名稱中輸入的所有數字,所以我在每個名稱下都有重複的行。我希望結果只顯示每個用戶的一個結果,所以我認爲最好使用不同的結果。但是,我還需要按降序顯示結果。這是否可能在相同的聲明中做? ORDER BY和DISTINCT在同一個select語句中

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 

ERROR

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 

目前的結果

: '如果指定SELECT DISTINCT ORDER BY項目必須出現在選擇列表'儘管我在選擇列表

+0

爲什麼在'SELECT'中沒有一個時,結果中有'Date'列?否則你的查詢應該工作正常。 –

+0

如果你只按名字加入,那麼你會得到例如3個「月份」記錄和90個「每日」記錄,因爲這個名字只有270行。這是打算?請考慮你想在結果中看到的內容。每個名稱和月份有一個記錄?每個姓名和每天一個記錄?每個名字一個記錄? 「日期」,「每日圖」和「月」應該包含哪些列? –

+3

「我想'DISTINCT'但是...」通常是你應該關注的一個線索,你首先得到重複結果的原因和/或b)你是否真的需要'GROUP BY'和聚合反而。目前,我不清楚這是(a)還是(b)情況。 –

回答

0

來解決這個問題,最好的辦法是通過列號位置訂購。例如。如果該列處於第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

我建議不要按保存的生產代碼中的列順序進行排序。當稍後有人修改代碼時,它會引入一個失敗點。但是,我一直在運行一次查詢中使用它們。 –

1

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 | 
+------------+--------------+------------+--------------+ 
+0

錯誤'如果指定了SELECT DISTINCT,ORDER BY項目必須出現在選擇列表中。'我已將它列入選擇列表 –

0

示例查詢未生成您發佈的當前結果。

在不同順序依據中,順序列必須是結果集的一部分。在您的示例查詢中,沒有名爲Daily Figure的列。如果使用Daily圖表而沒有表達式,那麼Order By可以正常工作。但是,一旦將它包裝在表達式中,它就不再被命名爲Daily圖形。

最簡單的解決方法是爲列別名。

, 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

我已經嘗試過使用別名,但它不適用於sql服務器 –

+0

更新您在問題中發佈的查詢語句。有一些我們錯過了。我多次使用了Distinct Order。它的規則非常簡單。 –

+0

這是代碼大聲笑。我已經使用了3號命令,它工作正常 –

相關問題