2010-04-05 38 views
3

澄清一下,你能用这种方法来排序吗?使用ORDER BY按值排序?

ORDER BY CompanyID = XXX DESC 

我想要做的是使用一个SQL查询来排序X = Y,在这种情况下,其中CompanyID = XXX。公司ID不是XXX的所有值都应在公司ID = XXX的所有结果之后。

我不想限制我的查询,但我确实想要将某个公司排序在其他列表上方。

+0

不是很确定一个解决这个的,但是'... ORDER BY CompanyID = XXX'肯定是不对的。也许你可以尝试类似'... WHERE CompanyID LIKE XXX ORDER BY CompanyID DESC' – themoondothshine 2010-04-05 16:02:23

回答

5

您所查询的是罚款。 CompanyID = xxx在比赛中产生1,否则为0。只需将CompanyID列添加为次级订单列即可。

ORDER BY CompanyID = XXX DESC, CompanyID ASC 

这样,你记录中,其中CompanyID你恒定的第一,那么剩下的比赛都井然有序。

或者,你可以这样做:

ORDER BY CompanyID <> XXX ASC, CompanyID ASC 
+0

当然,为什么没有发生在我身上。很简单。这也适用于LIKE吗? CompanyID LIKE %%,CompanyID = Y ASC – Kevin 2010-04-05 17:33:44

+0

@Kevin,是的,你可以用LIKE来做到这一点。 – 2010-04-05 17:55:05

+0

谢谢,这对我来说短期工作。在这里增加了答案,我想我可以从长远的角度提出一个更灵活的解决方案,但这让我回到了正轨。 – Kevin 2010-04-05 20:46:23

2

你也许可以伪造出来

SELECT CompanyID, IF(CompanyID = XXX, -1, CompanyID) AS sortby 
FROM companies 
ORDER BY sortby DESC 
+0

+1使用4个空格或Ctrl-K使代码显示为代码:) – Andomar 2010-04-05 16:02:59

7

您可以通过在命令使用的情况下,如:

order by case when CompanyID = XXX then 1 else 2 end 
+0

CASE eh?每天学些新东西。 – Kevin 2010-04-05 17:36:52

2

你可能想在你的顺序使用CASE语句的表达尝试。当公司ID与您的首选公司匹配时,返回0,否则返回1.然后按照公司名称的顺序按照次要顺序按列排序。

order by case when CompanyID = XXX then 0 else 1 end, CompanyName 

你有你的首选公司在顶部这样的话,那么所有的名字(或但是你想它订购)字母,其余秩序。

+0

我会试试这个。 – Kevin 2010-04-05 17:36:11

8
ORDER BY FIELD(CompanyID, 'google', 'apple', 'microsoft') ASC 

谷歌=第一
微软=第三
其余=最后

+0

+1有趣,但是对于Microsoft而言,字段函数将返回3,并且您按降序排序,所以Microsoft将首先执行 – Andomar 2010-04-05 16:08:43

+0

@Andomar - 糟糕,复制粘贴错误。 :)固定 – 2010-04-05 16:12:29

+0

但如果你排序上升,其余的将是第一! – Andomar 2010-04-05 16:36:01