Sql 订单联合结果

Sql 订单联合结果,sql,Sql,我很抱歉,因为我知道这是一个重复的问题,但由于某种原因,我的大脑无法将其他一些问题的答案转换为我的独特问题 我正在运行一个虚构网站,其信息存储在SQL数据库中。一个页面列出了一堆字符。我需要做的是能够列出这些角色的派系。但有些人没有势力,在SQL数据库中,他们的势力列为0。当按派系排序时,很明显我使用的是按派系编号排序。我希望这些没有派系的人出现在底部,而不是顶部,而是按派系编号排序,因为他们是0,所以他们会首先出现。我希望能够对每个子语句使用ORDER子句,但这会导致SQL解析错误。所以我必须

我很抱歉,因为我知道这是一个重复的问题,但由于某种原因,我的大脑无法将其他一些问题的答案转换为我的独特问题

我正在运行一个虚构网站,其信息存储在SQL数据库中。一个页面列出了一堆字符。我需要做的是能够列出这些角色的派系。但有些人没有势力,在SQL数据库中,他们的势力列为0。当按派系排序时,很明显我使用的是按派系编号排序。我希望这些没有派系的人出现在底部,而不是顶部,而是按派系编号排序,因为他们是0,所以他们会首先出现。我希望能够对每个子语句使用ORDER子句,但这会导致SQL解析错误。所以我必须同时对结果进行排序

到目前为止,为了简洁起见,我的SQL查询被缩减到只有几个字段名:

SELECT Id, Charactername, Faction FROM characters
WHERE Faction>0
 UNION
SELECT Id, Charactername, Faction
WHERE Faction=0 ORDER BY Faction, CharacterName
我的问题是,即使这两条语句由一个并集连接在一起,但我在最后按派别排序,所以SQL只是获取这两条语句的结果,然后将它们混合在一起。我如何才能使无派系的角色显示在底部?我在其他答案中引用了一些语句,例如,在偏执论中使用子查询,等等,并试图根据我自己的独特情况对它们进行调整,但我总是遇到逻辑或解析错误,似乎无法避免

有人有一个优雅的解决方案吗?谢谢


如果您需要,我可以提供该网站的URL,但一开始我不想这样做,因为在一个非此目的的网站上,这似乎是公然的自我宣传。

您可以这样做:

SELECT Id, Charactername, Faction FROM characters
WHERE Faction>0
UNION
SELECT Id, Charactername, 999999999 as Faction FROM characters
WHERE Faction=0 ORDER BY Faction, CharacterName
第二个选择中的数字必须大于最大值,然后在代码中将99999999视为空

你可以用一个箱子

SELECT Id, Charactername, Case When Faction=0 Then 9999999999 else Faction end AS Faction 
FROM characters
ORDER BY Faction, CharacterName

如果您使用的是Sql Server,您可以从cte中获益,如:

如果UNION的使用不是强制性的,您也可以尝试:

select id, Charactername, Faction
from characters
where Faction >= 0
order by Faction, id, Charactername

我认为您只需要通过以下方式获得正确的顺序:


根本不需要white或UNION。

我添加了一些white空格,只是为了避免水平滚动。所以:有一个FROM。。。缺少第二个选择。经过一点修补,完成了工作!谢谢
select id, Charactername, Faction
from characters
where Faction >= 0
order by Faction, id, Charactername
SELECT Id, Charactername, Faction
FROM characters
ORDER BY (CASE WHEN faction > 0 THEN 1 ELSE 2 END), CharacterName;