2017-09-20 23 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号命令,它工作正常 –

相关问题