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