简体   繁体   English

如何在SQL中使用union进行排序以首先选择查询值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM