我正在使用以下存储过程,以便从目前正常工作的表中获取项目。 有没有办法改变这个,以便如果col3等于“n / a”那么这些值应该添加到列表的末尾,其他一切按原样排序? 我想实现“n / a”值不会出现在我的列表中间,因为它们以“n”开头。
如果他们获得“sortID”99分配,因为所有其他项目都具有较低的数字“sortID”,这也是有效的。
我的SP(正常工作):
ALTER PROCEDURE [dbo].[FetchItems]
AS
BEGIN
SET NOCOUNT ON;
SELECT col1,
col2,
col3,
col4,
col5,
sortID
FROM FetchItems
WHERE itemStatus = 'active'
ORDER BY sortID, col3
FOR XML PATH('itemList'), ELEMENTS, TYPE, ROOT('ranks')
END
感谢您对此提供任何帮助,Tim。
答案 0 :(得分:3)
当然,你可以这样做:
ORDER BY CASE col3 WHEN 'n/a' THEN 1 ELSE 0 END, sortID, col3
CASE表达式将为所有“n / a”值生成1,为其余值生成0,因此首先按此表达式排序将有效地将所有“n / a”值置于最后。
答案 1 :(得分:1)
ORDER BY
CASE WHEN col3 <> 'N/A' THEN Col3 ELSE 'ZZZZZ' END,
sortID