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)