Incorrect syntax at '='
我正在尝试做与此问题类似的事情。我有这张桌子:
tab_id是第二列。 order_in_tab是第四列。
我想先按tab_id等于2的顺序排序,然后按tab_id的其余部分递增,然后按order_in_tab的顺序递增。
1 2 3 4
| 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新手,所以我不确定什么地方出了问题(或者如果我误解了上面的链接解决方案)。
- 确保此"按(tab_id = 2)排序"可以正常工作吗?到目前为止,从未见过顺序中的" = "
-
您正在使用哪个数据库?
-
您正在尝试使用该(tab_id=2)实现什么?
-
我在OP帖子中犯了同样的错误:"我想先按等于2的tab_id进行订购,然后按tab_id的其余部分递增,然后按order_in_tab的顺序递增。"
-
看到我的答案@Cyber??neticTwerkGuruOrc,它显示了您误解的内容。
尝试像这样更改查询:
1 2 3 4
| 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 |
- 关闭... ASC不应因为他先想要DESC而成为DESC?或者只是在case语句中切换1和0。
-
您能否详细解释CASE WHEN tab_id=2 THEN 1 ELSE 0 END DESC部分?
-
该语句代表计算值。如果tab_id = 2,则计算的值为1,否则为0。然后基于此计算的值进行排序
-
我认为"解决方案是在tab_id = 2 THEN -1 ELSE tab_id END ASC时,order_in_tab ASC排序"。
-
@dotnetom是否将0放在1之前(指的是then 1 else 0部分)?还是SQL不能那样工作?
-
如果顺序是升序,那么0首先是1,然后是1,但是在@xQbert注意到我的错误后,我将顺序更改为降序,在这种情况下,先是1,然后是0。
-
本质上,它正在做的事情是提供一个计算列进行排序。它按降序排序的任何内容都首先使用tab_id为2的内容,然后再进行其他所有操作,然后应用其他排序顺序。随着IMO更新的出现。
-
这样是否可以保证大小写tab_id=2将始终放在列表的顶部,然后其余的顺序升序(与行的混合无关)?
-
是的,这可以确保tab_id = 2的项目排在最前面,然后所有其他项目按tab_id和order_in_tab的升序排列
n
-
它仍然抱怨他=标志
-
@Cyber??neticTwerkGuruOrc那么您的RDBM是什么? MySQL,Oracle,Postgre MSSql?
-
我通过Microsoft SQL Server Management Studio执行此操作
-
那你做不到。这是一个Mysql语句。您应该使用@dotnetom提供的答案,因为sql server不支持此功能。
我认为你有副本
-
我在OP帖子中犯了同样的错误:"我想先按等于2的tab_id进行订购,然后按tab_id的其余部分升序,然后按order_in_tab的顺序升序。"
n