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

时间:2012-10-09 07:18:33

标签: 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 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]

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

1 个答案:

答案 0 :(得分:3)

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]