2017-12-18 152 views
0

我正在创建一个新表。表中的值/数据来自另一个表。例如:在table A我有场Code用2个数据,EXEIMP。在table B我有一个数据20162017Year。现在我需要制作table C,其中字段Status其中Status字段中的数据为EXE-2016,IMP-2016,EXE-2017IMP-2017。这种问题的查询过程如何?如何从oracle中的其他两个表中插入数据

table A 
code | code_name | flag 
EXE | Execute | Y 
IMP | Implement| Y 

table B 
Year | phase | flag 
2016 | P1 | Y 
2016 | P2 | Y 
2017 | P1 | Y 
2017 | P2 | Y 
2018 | P1 | N 

table C 
Status | Flag 
EXE-2016 | Y 
IMP-2016 | Y 
EXE-2017 | Y 
IMP-2017 | Y 
EXE-2018 | N 
IMP-2018 | N 
+0

提示:'CREATE TABLE [TABLE_1]作为选择......' – zarruq

+0

不清楚你想要什么。请包括所有表格的样本表数据,包括输出。 –

+0

我有一个查表编辑一样,我需要做的表格C,在那里他们得到表A和B.我试图Concat的数据,但我没有得到任何结果 –

回答

0

你想要从两个表中交叉加入记录:

  • 表A每年的记录来自表A
  • 每年来自表B的MAX标记(即, 'Y'胜过'N')

然后使用CREATE TABLE c AS <query>为了从查询结果创建表格C.

create table c as 
select a.code || '-' || bb.year as status, bb.flag 
from a 
cross join 
(
    select year, max(flag) as flag 
    from b 
    group by year 
) bb; 

(也许巴尔巴罗斯Özhan是正确的,你真的想创建一个视图,而不是然后使用create view c as <query>。)

-1
create table C as 
select A.code || '-' || B.year as status 
from A, B 
+2

即使仅仅是一个交叉连接,也不应该使用冗余的连接语法25年前。使用适当的ANSI连接:'从交叉连接B'。 –

+0

我想除了我的妻子之外,没有人应该对我说我应该做什么以及我应该做什么。 –

0

在你的情况下,最好以这样的方式来创建一个view记录sql供以后就像一个表的使用情况:

create view tableC as 
select code||' - '||year status, flag 
from (
     select a.code, b.year, b.flag from tableA a cross join tableB b  
    ) 
group by code, year, flag  
order by year, code;/ 

select * from tableC;/ 

D e m o

+1

不要在1 = 1上写'inner join ...,因为这不是内连接(两个表的标准必须匹配),而是交叉连接。所以写:'交叉连接tableB b'。 –

+0

@ThorstenKettner好的,你的想法更好,谢谢。 –

+0

在你的演示中你使用'insert into tableA values('EXE');',我需要的是他们从另一个表中自动生成。因为我在表格A中有很多数据。你能举出另一个例子吗?你做了什么看起来像我需要的东西 –

-1
CREATE table C as 
SELECT A.Code || '-' || B.Year AS 
STATUS , B.flag 
FROM A,B 
+2

请为您的解决方案添加一些解释。否则答案可能会被删除。 – rghome

+0

是的,我该怎么解释? –

+0

以接受的答案为例。 – rghome

相关问题