2017-12-18 177 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

相關問題