2009-09-23 113 views
-4

聯接表時我有問題(左連接) 表1:SQL查詢問題

id1 amt1 
1 100 
2 200 
3 300 

表2:

id2 amt2 
1 150 
2 250 
2 350 

我查詢: 選擇ID1,AMT1,ID2,從表1 AMT2 left join table2 on table2.id1 = table1.id2

我假設的o/p是:

 id1 amt1 id2 amt2 
row1: 1 100 1 150 
row2: 2 200 2 250 
row3: 2 200 2 350 

我想O/P在ROW3作爲

2空2 350

即我想避免數據repetetion(AMT1) 的朋友有所幫助!

+0

請花一些時間來設置您的問題的格式,並使其可讀性... – 2009-09-23 04:38:50

+0

-1再次發佈相同的問題,而不是參與你昨天得到的答覆。 http://stackoverflow.com/questions/1459993/problem-with-joining-db-tables/1460064#1460064 – APC 2009-09-23 04:47:32

回答

1

使用LEAD和LAG爲oracle中之前或之後的行提供了訪問權限。

SELECT id1, decode(amt1, lag(amt1) over (order by id1, id2), '', amt1) amt1, 
     id2, amt2 
FROM table1 left join table2 on table2.id1=table1.id2 
ORDER BY id1, id2 

查詢的順序和賦予滯後函數的順序應該相同。

說明:
如果當前AM1相同前述AMT1(在給定的順序前述),然後忽略的值。

編輯 根據您的評論,添加額外的ID更改檢查。

SELECT id1, 
     decode(id1, lag(id1) over (order by id1, id2), 
      decode(amt1, lag(amt1) over (order by id1, id2), '', amt1), 
      amt1) amt1, 
     id2, amt2 
FROM table1 left join table2 on table2.id1=table1.id2 
ORDER BY id1, id2 

使用相同的LAG功能檢查ID變化。該表達式有點複雜,但它與嵌套的if語句相當。

+0

thnx哥們我認爲它的工作... – user2392858 2009-09-23 13:23:00

+0

如果你認爲它的工作,標記答案。它也爲你帶來聲譽。 – Christian13467 2009-09-23 14:47:22

+0

你好,你的查詢工作4我。但我有一個問題,即使id是不同的,並且金額是相同的,你的查詢,在我的 amt設置爲null ...我最初在一個過程中使用表數的聯合 – user2392858 2009-09-28 07:05:40

1

選擇不同 ID1,AMT1,ID2,從表1 AMT2左連接上table2.id1表2 = table1.id2

試試這個?