按整数排序,底部有空白字段

jon*_*bbs 3 sql sql-server sql-server-2008

我们目前正在重写我们的CMS,我们希望我们的客户能够使用"位置"字段重新订购表格中的项目.因此,如果他们将项目标记为位置1,则将其标记为顶部,然后将位于其下方的位置2等.

问题是我们不希望他们每次都要填写一个位置,只要他们想重新订购某些东西,所以位置字段通常是空白的.所以你可能有以下......

车 - 1

自行车 - 2

电脑

这会导致问题,因为如果您使用以下SQL ...

SELECT ProductName FROM Products ORDER BY Position DESC;
Run Code Online (Sandbox Code Playgroud)

所有空白的都是顶部,而不是底部.

可以使用SQL语句将它们放入正确的顺序吗?

Amy*_*y B 15

SELECT ProductName
FROM Products
ORDER BY
  CASE WHEN Position is null THEN 1 ELSE 0 END,
  Position
Run Code Online (Sandbox Code Playgroud)

如果您想按位置降序排序,同时在底部保持空值,则可以这样做:

ORDER BY
  CASE WHEN Position is null THEN 1 ELSE 0 END,
  Position desc
Run Code Online (Sandbox Code Playgroud)

如果您想要一致的排序(可能是分页),那么在末尾添加ProductName或ProductID以打破未定位产品之间的所有联系.

ORDER BY
  CASE WHEN Position is null THEN 1 ELSE 0 END,
  Position,
  ProductID
Run Code Online (Sandbox Code Playgroud)