这是我的整个剧本
CREATE TABLE #TEST (
STATE CHAR(2))
INSERT INTO #TEST
SELECT 'ME' UNION ALL
SELECT 'ME' UNION ALL
SELECT 'ME' UNION ALL
SELECT 'SC' UNION ALL
SELECT 'NY' UNION ALL
SELECT 'SC' UNION ALL
SELECT 'NY' UNION ALL
SELECT 'SC'
SELECT *
FROM #TEST
ORDER BY CHARINDEX(STATE,'SC,NY')
我想显示所有记录,从with SC first
和second with NY
开始,然后在没有任何订单的情况下休息。
当我执行上面的sql时,首先所有记录都附带ME
,这不在我的列表中。
告诉我我在哪里弄错了。感谢。
答案 0 :(得分:3)
使用CASE
声明
SELECT *
FROM #TEST
ORDER BY CASE WHEN STATE LIKE 'SC%' THEN 0
WHEN STATE LIKE 'NY%' THEN 1
ELSE 2
END
输出
STATE
-----
SC
SC
SC
NY
NY
ME
ME
ME
答案 1 :(得分:2)
请在此处查看未找到搜索模式时CHARINDEX返回的内容 - https://msdn.microsoft.com/en-GB/library/ms186323.aspx
为避免处理0案例,您可以使用以下内容。
ORDER BY
CASE LEFT(state, 2)
WHEN 'SC' THEN 1
WHEN 'NY' THEN 2
ELSE 3
END
这应该更容易编写,阅读和维护。
它也应该使用更少的CPU,但我怀疑它会产生有形的差异。
答案 2 :(得分:1)