sql查询顺序的部分

时间:2015-10-28 13:08:00

标签: sql sql-server-2012

假设您有一张包含10 000个不同电子邮件地址记录的表格,但在此表格中有几百个(这可能有所不同,应该无关紧要)包含特定域名的地址,即@ horses.com。

我想在一个查询中 检索所有10 000条记录,但包含@ horses.com的记录将始终位于列表的顶部。

像这样的东西“SELECT TOP 10000 * FROM dbo.Emails ORDER BY - 包含@ horses.com的记录首先出现”

OR

从dbo.Emails表中给我10000条记录,但不管有多少,都会首先包含“@ horses.com”的所有人。

BTW这是在sql 2012服务器上。

任何??

3 个答案:

答案 0 :(得分:1)

试试这个:

SELECT TOP 10000 * 
FROM dbo.Emails 
ORDER BY IIF(Email LIKE '%@horses.com', 0, 1)

这假设电子邮件以“@ horses.com”结尾,这并非不合理。如果您确实需要类似contains的功能,请在%之后添加另一个.com

编辑 IIF功能仅在sql server 2012及更高版本中可用,以便使用CASE WHEN Email LIKE '%@horses.com' THEN 0 ELSE 1 END更便携的解决方案。

答案 1 :(得分:1)

SELECT TOP 10000 * 
FROM dbo.Emails 
ORDER BY case when charindex('@horses.com', email) > 0 
              then 1
              else 2
         end,
         email

答案 2 :(得分:0)

SELECT 1,*  FROM dbo.Emails   where namn like '%@horses.com%'
  union
SELECT 2,*  FROM dbo.Emails   where namn not like '%@horses.com%'
order by 1