發問時間: 電腦與網際網路軟體 · 1 0 年前

ORACLE如何串資料的問題

請問~~ORACLE如何串資料的問題

假設在A TABLE裡有NUM、GRADE這2個欄位

NUM|GRADE

1||||||||||||||||60

2||||||||||||||||70

3||||||||||||||||50

在B TABLE裡有NUM、GRADE_PERCENT這2個欄位

NUM | GRADE_PERCENT

1||||||||||||||||||||||||||||||||1.1

3||||||||||||||||||||||||||||||||1.5

請問要如何下指令,讓A TABLE 跟B TABLE的資料連結,但假如A

TABLE有資料,可是B TABLE沒有資料(就是A TABLE有2號,B

TABLE沒有2號),可是A有的資料都要顯示出來,但是A有B沒有的

要補0(或補1也可以)。如下圖, 重點在於2號那筆要拉出來,GRADE_PERCENT要

補0........請幫幫我~~~謝謝。

NUM | GRADE | GRADE_PERCENT

1||||||||||||||||||||60|||||||||||||||||||||||||||||1.1

2||||||||||||||||||||70||||||||||||||||||||||||||||||0

3||||||||||||||||||||50||||||||||||||||||||||||||||||1.5

已更新項目:

RE:貓...

我用你的方法去RUN過了,但是還是串不出來耶....

因為B TABLE裡面沒有NUM = 2的這筆資料....

我再研究看看~~如果你有空滴話再請你幫偶想一下~~謝謝你喔~~

2 個已更新項目:

RE:貓...

拍謝~~我剛再去試過了,你滴方法是可以挑出乃沒錯

偶剛剛挑不出乃的原因是在於我的TABLE裡面還有其他時間型態欄位

偶再企研究一下.....

3 個已更新項目:

不好意思~~第一次忘了考慮時間的欄位,偶再補充一下

TABLE A

NUM|GRADE|YEAR|MONTH

1||60||20060101||20060101

1||60||20060101||20060201

(NUM 1有細分12個月)

2||70||20060101||20060101

(NUM 2有細分12個月)

3||50||20060101||20060101

(NUM 3有細分12個月)

4 個已更新項目:

TABLE B

NUM | GRADE_PERCENT|GRADE_TYPE|YEAR|MONTH

1||1.1||D||20050101||20050101

1||1.1||D||20050101||20050201

(2005年細分12個月)

1||1.2||D||20060101||20060101

(2006年細分12個月)

3||1.5||D||20050101||20050101

(2005年細分12個月)

3||1.4||D||20060101||20060101

(2006年細分12個月)

5 個已更新項目:

NUM | GRADE | GRADE_PERCENT

1||||||||||||||||||||60|||||||||||||||||||||||||||||1.1

2||||||||||||||||||||70||||||||||||||||||||||||||||||0

3||||||||||||||||||||50||||||||||||||||||||||||||||||1.5

6 個已更新項目:

上面的補充是要挑出 2006年1月的資料,但B TABLE裡沒有NUM 2,所以GRADE_PERCENT要為0

不好意思我寫的有點混亂~~@___@因為測的頭昏了~~

1 個解答

評分
  • 1 0 年前
    最佳解答

    select table_A.*,nvl(table_B.grade_percent,0) grade_percent

    from table_A,table_B

    where table_A.num=table_B.num(+)

    有問題再提出來唷

    2006-07-07 13:55:14 補充:

    其他時間型態欄位?如果方便的話可以把2個table的所有欄位及泥想要表示的欄位列出來醬我也可以一起幫泥想

    2006-07-07 16:32:17 補充:

    泥說要挑出 2006年1月的資料是table_A、table_B的year跟month都是要200601嗎如果是的話

    2006-07-07 16:32:31 補充:

    那最後的結是應該是NUM | GRADE | GRADE_PERCENT1||||||||||||||||||||60|||||||||||||||||||||||||||||1.2 2||||||||||||||||||||70||||||||||||||||||||||||||||||03||||||||||||||||||||50||||||||||||||||||||||||||||||1.5num 1的2006年1月的grade_percent是1.2吧?

    2006-07-07 17:18:29 補充:

    試試看select table_A.num,table_A.grade,NVL(table_B.grade_percent,0) grade_percentfrom (select distinct num,gradefrom testawhere substr(xmonth,1,6) = '200601' ) table_A,(select distinct num,grade_percentfrom testbwhere substr(xmonth,1,6) = '200601') table_Bwhere table_A.num=table_B.num(+)

    參考資料: 自已
還有問題?馬上發問,尋求解答。