繁体   English   中英

具有SELECT AS子查询的Oracle SQL UNION

[英]Oracle SQL UNION with SELECT AS subqueries

我一直试图从SELECT语句创建视图,该视图应该从表中获取一些字段。 问题是我需要至少两次使用同一字段,具体取决于其foo和bar。 我正在尝试做类似的事情

SELECT x, y FROM 
( 
(SELECT foo from table where abc='TYPE 1') as x
UNION
(SELECT foo from table where def='TYPE 2') as y
) table;

该语句失败,因为我似乎无法在UNION语句中使用“ as x”和“ as y”。 有什么办法可以绕过它?

LE:我需要的是以下方面的东西:

SELECT x, y FROM 
(
(SELECT foo from table where abc='TYPE 1') as x,
(SELECT foo from table where def='TYPE 2') as y
) table

其中x和y是foo,它是一个数字。 基本表是:

FOO |  ABC   |  DEF
_________________________
100 | TYPE 1 | ----
300 | ------ | TYPE 2

预期输出为:

 X  |  Y  |  ABC   |  DEF
_________________________
100 | --- | TYPE 1 | ----
--- | 300 | ------ | TYPE 2

我需要根据abc和def将foo分为自身的子列,它们是同一表中的列。

查询子查询时可用于选择的列限于该子查询本身选择的列。 所以以下是我在这里写的内容:

SELECT foo FROM yourTable WHERE abc = 'TYPE 1'
UNION ALL
SELECT foo FROM yourTable WHERE def = 'TYPE 2';

我使用UNION ALL ,因为如果您真的想使用UNION并删除重复项,那么以下单个查询将与您的原始尝试相同:

SELECT DISTINCT foo
FROM yourTable
WHERE abc = 'TYPE 1' OR def = 'TYPE 2';

编辑:

也许您想要这样:

SELECT foo, 'TYPE 1' AS type FROM yourTable WHERE abc = 'TYPE 1'
UNION ALL
SELECT foo, 'TYPE 2' FROM yourTable WHERE def = 'TYPE 2'
ORDER BY type, foo;

您尝试获取columns而不是rows ,因此使用UNION并非如此。 您可以尝试以下操作(假设您有一个名为id的主键列):

create table "table" ( id int, foo varchar(10), abc varchar(100), def varchar(100));
insert into "table" values(1, 'abc', 'TYPE 1', 'TYPE 2');
insert into "table" values(2, 'def', 'TYPE 3', 'TYPE 2');

SELECT  
    (SELECT foo from "table" where abc='TYPE 1' and id = t2.id ) as x,
    (SELECT foo from "table" where def='TYPE 2' and id = t2.id ) as y
 FROM "table" t2;

 X    Y
---  ---
abc  abc
def

因为您期望从同一张表中获得此信息。

**请根据需要通过相应地更改大小写来尝试以下操作

select distinct c.*
from (select foo, null, abc, null
      from table a
      where abc = 'type 1'
      union all
      select null, abc, null, def
      from table b
      where def = 'type 2'
     ) c ;

您可以使用此技术创建2个临时表,然后将它们联接

WITH 
     X AS (SELECT FOO FROM TABLE WHERE  ABC = 'TYPE 1'),
     Y AS (SELECT FOO FROM TABLE WHERE  DEF = 'TYPE 2')

SELECT * FROM X
UNION
SELECT * FROM Y

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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