【问题标题】:ORDER BY items must appear in the select list if SELECT DISTINCT is specified如果指定了 SELECT DISTINCT,则 ORDER BY 项目必须出现在选择列表中
【发布时间】:2012-10-09 07:18:33
【问题描述】:

我有 sql 查询,我希望在其中按特定列返回具有不同值顺序的行。 比如说,我想通过 locationid 从 ordertable order 中区分 batchno。

我也试过谷歌,但无法找到解决方案

ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

这就是我每次尝试得到的结果。

当不使用 distinct 时,我得到了输出,但使用此查询有重复的行

Select Batchno,LocationId from Ordertbl order by case when[LocationId] =3 THEN 0 ELSE 1 END, [LocationId]

如果我使用 distinct 它会给我错误这些是我尝试过的查询。

Select distinct CAST(Batchno as Varchar(MAX)),LocationId from Ordertbl order by case when[LocationId] =3 THEN 0 ELSE 1 END,[LocationId]

Select distinct CAST(Batchno as Varchar(MAX)),LocationId from Ordertbl order by case when[LocationId] =3 THEN 0 ELSE 1 END,[LocationId],[Batchno]

所以这是我尝试过但没有运气的事情。请帮助我。

【问题讨论】:

  • Batchno 的数据类型是什么?你为什么要把它投射到Varchar(MAX)

标签: sql database sql-order-by distinct


【解决方案1】:

DISTINCT 不允许在ORDER BY 中出现不在SELECT 列表中的任何表达式(即使在这种情况下,该表达式只能为每个不同的行产生一个特定值)。你可以使用。

SELECT Batchno,
       LocationId
FROM   Ordertbl
GROUP  BY Batchno,
          LocationId
ORDER  BY CASE
            WHEN[LocationId] = 3 THEN 0
            ELSE 1
          END,
          [LocationId] 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2023-03-20
    相关资源
    最近更新 更多