' ='的语法不正确

时间:2014-07-24 19:23:23

标签: sql sql-server

我试图做类似this question的事情。我有这张桌子:

<code>tab_id</code> is the second column.  <code>order_in_tab</code> is the fourth column.

tab_id是第二列。 order_in_tab是第四列。

我想首先按tab_id等于2,然后tab_id的其余部分按升序排序,然后order_in_tab升序。

select * 
from cam_to_tab_mapping 
where unit_id='90013550' 
order by (tab_id='2') asc, tab_id asc, order_in_tab asc

然而,它说Incorrect syntax at '='.。我是一个完整的SQL新手,所以我不确定出了什么问题(或者我是否误解了上面的链接解决方案)。

4 个答案:

答案 0 :(得分:3)

尝试按以下方式更改查询:

select * 
from cam_to_tab_mapping 
where unit_id='90013550' 
order by CASE WHEN tab_id='2' THEN 1 ELSE 0 END DESC, tab_id asc, order_in_tab asc

答案 1 :(得分:1)

我认为你有副本&amp;在您的查询中粘贴错误。

select * 
from cam_to_tab_mapping 
where unit_id='90013550' 
order by (tab_id='2') asc, tab_id asc, order_in_tab asc

您有一个逻辑表达式作为第一个order by条件。

也许你的意思

select * 
from cam_to_tab_mapping 
where unit_id='90013550' and tab_id='2'
order by tab_id asc, order_in_tab asc

答案 2 :(得分:1)

您关联的问题是正确的。你只是误解了字段的类型。它有一个字符串字段,可以均衡为字符串。

所以在你的情况下你必须这样做:

select * 
 from cam_to_tab_mapping 
where unit_id='90013550' 
order by (tab_id=2) DESC, 
        tab_id asc, order_in_tab asc

(tab_id=2) DESC会在结果中首先显示2的id。

在这里查看小提琴:http://sqlfiddle.com/#!2/15ffc/2

编辑:

OP表示它正在使用SQL Server。这个答案适用于MySQL。在SQL SERVER上,正确的方法是使用CASE语句,如:

select * 
 from cam_to_tab_mapping 
where unit_id='90013550' 
order by (case when tab_id=2 then 0 else 1 end), 
        tab_id, order_in_tab

答案 3 :(得分:0)

按顺序,您不能指定tab_id = 2。您必须添加另一个虚拟字段,对于tab_id = 2将为0,否则为1,然后按该字段排序,然后按tab_id排序。试试这种方式......

select mac, tab_id, unit_id, order_in_tab, 
(case when tab_id='2' then 0 else 1 end) as temp
from cam_to_tab_mapping 
where unit_id='90013550' 
order by temp, tab_id, order_in_tab

您(可以)不需要在order by子句中指定asc,如果您没有指定任何内容,则默认为asc。