我正在尝试通过几个不同的列来执行订单。第一列有几个条件。
基本顺序类似于
SELECT *
FROM Table T
ORDER BY T.A, T.B, T.C
大多数时候,列A是一个int。有时A是一个int,末尾附加一个字母。我希望订单是我的号码部分。我能够通过将查询修改为以下已经工作了数月的以下内容来实现这一目标。
SELECT *
FROM Table T
ORDER BY
CASE WHEN ISNUMERIC(a.[HUDLine]) = 0 THEN CAST(SUBSTRING(T.A,1, PATINDEX('%[^0-9]%',T.A - 1) AS INT)
ELSE CAST (T.A AS INT) end
, T.B, T.C
最近出现了一项新要求,它允许“OFFLINE”的值存在于A列中。
我想修改ORDER BY以保持与以前相同的逻辑,但所有带有“OFFLINE”的记录都在最后。
答案 0 :(得分:1)
首先,我对您的要求感到非常抱歉,将varizz列中存储了混杂的混合值完全没有意义。
第二次尝试这个
CASE WHEN a.[HUDLine] = 'OFFLINE'
THEN 2147483647 --This is the maximum signed int value
ELSE
(CASE WHEN ISNUMERIC(a.[HUDLine]) = 0
THEN CAST(SUBSTRING(T.A,1, PATINDEX('%[^0-9]%',T.A - 1) AS INT)
ELSE CAST (T.A AS INT)
END)
END
向负责数据模型的人显示,并礼貌地要求他们在数字列中存储有意义的数字数据。