2015-11-25 50 views
1

我嘗試對此問題進行搜索,但仍找不到解決方案。 我有2列,如下面結合:如何在查詢結果中添加獨立列

第一個表:

ID Name Item 
42 america 1433 
42 america 1695 
42 america 1234 
8 london 1433 
8 london 1705 
8 london 1432 

二表:

ID CreatedBy 
42 John 
42 Erica 
8 Amy Song 
8 Alfred 

如果我剛剛加入這兩個表會變成這個樣子:

ID Name Item CreatedBy 
42 america 1433 John 
42 america 1695 John 
42 america 1234 John 
42 america 1433 Erica 
42 america 1695 Erica 
42 america 1234 Erica 
8 london 1433 Amy Song 
8 london 1705 Amy Song 
8 london 1432 Amy Song 
8 london 1433 Alfred 
8 london 1705 Alfred 
8 london 1432 Alfred 

Column Created By僅與ID有關,並且與名稱和項目無關。 我只想將CreatedBy作爲新列插入到只鏈接到ID的第一個表中,所以預期結果如下所示。 有沒有什麼辦法可以得到像這樣的結果?

ID Name Item CreatedBy 
42 america 1433 John 
42 america 1695 Erica 
42 america 1234 NULL 
8 london 1433 Amy Song 
8 london 1705 Alfred 
8 london 1432 NULL 

讓我們說,我們改變第二表是這樣的:

二表:

ID CreatedBy 
42 John 
8 Amy Song 

結果會是這樣:

ID Name Item CreatedBy 
42 america 1433 John 
42 america 1695 NULL 
42 america 1234 NULL 
8 london 1433 Amy Song 
8 london 1705 NULL 
8 london 1432 NULL 

我真的apreacite對你有所幫助,並感謝你在高級masta。

注意:Column CreatedBy是獨立的列,只與ID相關,並且與Name和Item無關。

+1

什麼是你想要的輸出背後的邏輯是什麼?你爲什麼要拿着艾米而不是阿爾弗雷德,反之亦然? – dfundako

+1

我對你的問題感到困惑。我假設ID是ID字段唯一的另一個表的外鍵。然而,我不明白爲什麼你想要的結果中最後一行的'CreatedBy'值應該是NULL,並且爲什麼當** Alfred需要** Amy Song **具有'Item'編號** 1433 ** **有該項目的記錄。你能解釋一下嗎? –

+0

嗨,這就是爲什麼我說我想插入CreatedBy列作爲獨立的數據,只涉及到ID和不涉及名稱和項目 – user1437001

回答

1

所以,我會回答你,即使有些人在這裏討論它的評論可能會不同意,因爲你的問題沒有適當的邏輯。

重要的是要指出,這個答案適用於這個具體案例如果它不會爲你提供正確的數據爲更大的數據集,你必須提供更多的信息。

我所做的:

我由name創建從第一組排序它的一個子集(和索引它,窗功能),然後創建從第二組由id所以責令其另一個子集,我有:

select id, name, item, row_number() over (partition by name order by name) idx from tablea 

而且

select id, createdby, row_number() over (partition by id order by id) idx from tableb 

然後我LEFT JOIN的tableatablebid和順序創建科拉姆idx所以

select a.id, a.name, a.item, b.createdby 
    from (select id, name, item, row_number() over (partition by name order by name) idx from tablea) a 
     left join 
     (select id, createdby, row_number() over (partition by id order by id) idx from tableb) b 
       on (a.id = b.id and a.idx=b.idx) 
    order by a.name 

order by只是爲了得到結果,你問你的問題。

見這裏:http://sqlfiddle.com/#!3/7ef70/3

你的第二個樣本數據:http://sqlfiddle.com/#!3/675625/1

+0

哇,你真是偉大的兄弟!是工作。 我的問題解決了。 – user1437001

+0

@ user1437001很高興知道它有幫助!請考慮接受答案!這是答案左側的「V」,並且低於0! –

相關問題