Sql 如果指定了select DISTINCT,则ORDER BY项目必须出现在选择列表中

Sql 如果指定了select DISTINCT,则ORDER BY项目必须出现在选择列表中,sql,database,sql-order-by,distinct,Sql,Database,Sql Order By,Distinct,我有一个sql查询,其中我希望按特定列返回具有不同值顺序的行。 比如说,我希望通过locationid从ordertable order中删除batchno 我也尝试过谷歌,但没有找到解决方案 ORDER BY items must appear in the select list if SELECT DISTINCT is specified. 这就是我每次尝试的结果 当不使用distinct时,我得到了输出,但使用此查询得到了重复的行 Select Batchno,LocationId

我有一个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]


所以这是我尝试过但没有运气的东西。请帮帮我。

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] 

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] 

Batchno
的数据类型是什么?为什么要将其强制转换为
Varchar(MAX)
?Batchno的数据类型是什么?为什么要将其强制转换为
Varchar(MAX)