在连接列上按空字符串最后的顺序

时间:2018-09-21 21:35:52

标签: sql-server sql-order-by

我正在尝试按字母顺序对表进行排序,最后是空值,但是遇到了问题。

下面的代码产生以下错误:

  如果指定了SELECT DISTINCT,则

ORDER BY项目必须出现在选择列表中。

select distinct 
'item' = othertab..item,
'stockedFor' = tab..stocked_for
          + ', ' + tab..stockedFor2
          + ', '+ tab..stockedFor3

from tab

order by case when stockedFor is null then 1 else 0 end, stockedFor

如何按字母顺序返回stockedFor,最后返回空值?

2 个答案:

答案 0 :(得分:0)

只需将其包装在另一个select语句中即可:

select stockedFor
from (
       select distinct 
       'stockedFor' = tab..stocked_for
                 + ', ' + tab..stockedFor2
                 + ', '+ tab..stockedFor3
       from tab
     ) x
order by case when stockedFor is null then 1 else 0 end, stockedFor

答案 1 :(得分:0)

由于要删除重复项,因此一种解决方法是使用GROUP BY而不是DISTINCT删除重复项。问题已更改,但是如果将所有列都放在SELECT的{​​{1}}中,该方法仍然适用。

例如:

GROUP BY