[英]How to order by with union in SQL to make first select query value first?
In this query:在这个查询中:
SELECT NM, DEP_CD FROM EMP WHERE DEP_CD='1100' and (SELECT COUNT(1) FROM BBS_TABLE WHERE UP_DEP_CD = '1100') > 0
UNION
SELECT NM, DEP_CD FROM EMP WHERE DEP_CD '1110'
First第一的select query ( SELECT NM, DEP_CD FROM EMP WHERE DEP_CD='1100'
and和(SELECT COUNT(1) FROM BBS_TABLE WHERE UP_DEP_CD = '1100') > 0)
always returns 1 result.总是返回 1 个结果。
I want to put this one first in the result values, but there are no regular rules for results so I couldn't use order by.我想把这个放在结果值的第一位,但结果没有常规规则,所以我不能使用 order by。
How can I put the first query's result in the first row?如何将第一个查询的结果放在第一行? I use oracle db.我使用oracle数据库。
Here is an option to do it.这是一个选项。
Define a dummy column as rnk, giving the first query rnk=1 and the one below the union as 2. After that order by the rnk column将虚拟列定义为 rnk,将第一个查询 rnk=1 和联合下方的查询定义为 2。之后按 rnk 列排序
SELECT NM, DEP_CD,1 as rnk FROM EMP WHERE DEP_CD='1100' and (SELECT COUNT(1) FROM BBS_TABLE WHERE UP_DEP_CD = '1100') > 0
UNION
SELECT NM, DEP_CD,2 as rnk FROM EMP WHERE DEP_CD '1110'
ORDER BY 3 ASC
In case you dont want the final output to have the rnk field then use an outer query as follows如果您不希望最终输出具有 rnk 字段,请按如下方式使用外部查询
select x.NM,x.DEP_CD from (
SELECT NM, DEP_CD,1 as rnk FROM EMP WHERE DEP_CD='1100' and (SELECT COUNT(1) FROM BBS_TABLE WHERE UP_DEP_CD = '1100') > 0
UNION
SELECT NM, DEP_CD,2 as rnk FROM EMP WHERE DEP_CD '1110'
)x
ORDER BY x.rnk ASC
Why would you use union
?为什么要使用union
? Why not just use:为什么不使用:
SELECT NM, DEP_CD
FROM EMP
WHERE DEP_CD = '1100'
ORDER BY (SELECT COUNT(1) FROM BBS_TABLE WHERE UP_DEP_CD = '1100') DESC;
You can simply use the order by
on DEP_CD
as follows:您可以简单地使用DEP_CD
上的order by
,如下所示:
SELECT NM, DEP_CD FROM EMP WHERE DEP_CD='1100' and (SELECT COUNT(1) FROM BBS_TABLE WHERE UP_DEP_CD = '1100') > 0
UNION
SELECT NM, DEP_CD FROM EMP WHERE DEP_CD = '1110'
ORDER BY DEP_CD; -- this line
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.