TSQL顺序但首先显示这些

时间:2019-04-18 09:06:01

标签: tsql sql-order-by

我正在研究数据集。
我只是想知道是否有一种方法可以像下面的1个查询中那样进行订购

Select * From MyTable where name ='international%' order by id
Select * From MyTable where name != 'international%' order by id

因此,首先显示所有国际项目,其次是不以国际名称开头的名称。

我的问题不是要添加列来完成此工作,还是要使用多个数据库,或者使用更大的TSQL脚本将数据库克隆为新顺序。
我只是想知道是否可以欺骗“ 在哪里在哪里或在...上”后面的任何内容。

2 个答案:

答案 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])添加一个持久化的计算列,以加快处理速度。