我正在研究数据集。
我只是想知道是否有一种方法可以像下面的1个查询中那样进行订购
Select * From MyTable where name ='international%' order by id
Select * From MyTable where name != 'international%' order by id
因此,首先显示所有国际项目,其次是不以国际名称开头的名称。
我的问题不是要添加列来完成此工作,还是要使用多个数据库,或者使用更大的TSQL脚本将数据库克隆为新顺序。
我只是想知道是否可以欺骗“ 在哪里在哪里或在...上”后面的任何内容。
答案 0 :(得分:4)
您可以在ORDER BY
中使用表达式:
Select * From MyTable
order by
CASE
WHEN name like 'international%' THEN 0
ELSE 1
END,
id
(从您的叙述中,听起来您也想要like
,而不是=
,所以我也改变了这一点)
答案 1 :(得分:0)
另一种方式(稍微干净一点,快一点)
-- Sample Data
DECLARE @mytable TABLE (id INT IDENTITY, [name] VARCHAR(100));
INSERT @mytable([name])
VALUES('international something' ),('ACME'),('international waffles'),('ABC Co.');
-- solution
SELECT t.*
FROM @mytable AS t
ORDER BY -PATINDEX('international%', t.[name]);
也请注意,您可以为-PATINDEX('international%', t.[name])
添加一个持久化的计算列,以加快处理速度。