2017-08-08 103 views
0

我有兩個表/視圖,我想適當加入。它們是V_ARINVOICE_ALLV_GLBATCH_AR_COGS。下圖中的第三張表V_ARINVOICE_ALL僅供參考。的Oracle SQL連接兩個表/視圖避免交叉產品

Click Here

目前我得到的行的金額錯誤被退回,因爲,我認爲,那種交叉聯接。我試圖從V_GLBATCH_AR_COGS加入Credit

我用下面的SQL查詢來加入V_ARINVOICE_ALLV_ARINVOICE_ALL和我得到的一切除了`信用正確的結果沒有被選擇:

SELECT 
V_ARINVOICE_ALL.INVOICE_DATE, 
V_ARINVOICE_ALL.ARCUSTO_COMPANY, 
V_ARINVOICE_ALL.ARCUSTO_CUSTNO, 
V_ARINVOICE_ALL.INVOICE_NO 


FROM 
IQMS.V_ARINVOICE_ALL V_ARINVOICE_ALL 


INNER JOIN 
IQMS.V_GLACCT V_GLACCT 
ON 
    V_ARINVOICE_ALL.GLACCT_ID_SALES = V_GLACCT.ID AND V_GLACCT.ACCT = '3648-00-0' 



WHERE 
V_ARINVOICE_ALL.ARCUSTO_CUSTNO = 'OX01' 
AND 
V_ARINVOICE_ALL.INVOICE_DATE >= TO_DATE('05/04/2016', 'dd/mm/yyyy') 
AND 
V_ARINVOICE_ALL.INVOICE_DATE <= TO_DATE('15/06/2017', 'dd/mm/yyyy') 

ORDER BY 
V_ARINVOICE_ALL.INVOICE_DATE 

結果(41行)

|INVOICE_DATE|...| INVOICE| 
    +------------+---+--------+ 
    | 05/04/2016|...| 494658| 
    | 20/05/2016|...| 495274| 
    | 20/05/2016|...| 495275| 

但是,當我嘗試加入V_ARINVOICE_ALLV_GLBATCH_AR_COGS用下面的查詢:

SELECT 
V_ARINVOICE_ALL.INVOICE_DATE, 
V_ARINVOICE_ALL.ARCUSTO_COMPANY, 
V_ARINVOICE_ALL.ARCUSTO_CUSTNO, 
V_ARINVOICE_ALL.INVOICE_NO, 
V_GLBATCH_AR_COGS.CREDIT AS "INCOME" 


FROM 
IQMS.V_ARINVOICE_ALL V_ARINVOICE_ALL 


INNER JOIN 
IQMS.V_GLBATCH_AR_COGS V_GLBATCH_AR_COGS 
ON 
V_ARINVOICE_ALL.GLBATCHID_ID = V_GLBATCH_AR_COGS.ID 
AND V_ARINVOICE_ALL.GLPERIODS_ID_AR = V_GLBATCH_AR_COGS.GLPERIODS_ID 
AND V_GLBATCH_AR_COGS.DESCRIP LIKE '%OX01%ITEMS%' AND V_GLBATCH_AR_COGS.ACCT = '3648-00-0' 



WHERE 
V_ARINVOICE_ALL.ARCUSTO_CUSTNO = 'OX01' 
AND 
V_ARINVOICE_ALL.INVOICE_DATE >= TO_DATE('05/04/2016', 'dd/mm/yyyy') 
AND 
V_ARINVOICE_ALL.INVOICE_DATE <= TO_DATE('15/06/2017', 'dd/mm/yyyy') 

ORDER BY 
V_ARINVOICE_ALL.INVOICE_DATE 

我得到的是這樣的:(165行)

|INVOICE_DATE|...| INVOICE| INCOME| 
    +------------+---+--------+--------+ 
    | ...  |...| ... | ... | 
    | 23/06/2016|...| 495667|  225| 
    | 23/06/2016|...| 495667|  225| 
    | 23/06/2016|...| 495667|  225| 
    | 23/06/2016|...| 495667|  225| 
    | 23/06/2016|...| 495667|  225| 
    | 23/06/2016|...| 495667|  225| 
    | 23/06/2016|...| 495667|  450| 
    | 23/06/2016|...| 495667|  450| 
    | 23/06/2016|...| 495667|  450| 
    | ...  |...| ... | ... | 

期望的結果(41行)

|INVOICE_DATE|...| INVOICE| INCOME| 
    +------------+---+--------+--------+ 
    | ...  |...| ... | ... | 
    | 23/06/2016|...| 495667|  225| 
    | 23/06/2016|...| 495667|  225| 
    | 23/06/2016|...| 495667|  450| 
    | ...  |...| ... | ... | 

我多一點熟悉加入比我以前。但我不確定我是否做對了。我試過正確的連接,右外連接,左連接,左外連接等。我在這裏做錯了什麼?


編輯2:第一次編輯是壞的沒有意義。我不知道這是否幫助,但只有兩行,將是

| 23/06/2016|...| 495667|  225| 
    | 23/06/2016|...| 495667|  225| 

在表中的WHERE條款上加入匹配,其中:V_ARINVOICE_ALL.GLPERIODS_ID_AR = V_GLBATCH_AR_COGS.GLPERIODS_ID AND V_GLBATCH_AR_COGS.DESCRIP LIKE '%OX01%ITEMS%' AND V_GLBATCH_AR_COGS.ACCT = '3648-00-0

但仍然會得到它的兩倍以上。所以我想這與1到Many的關係有關係。我不知道該如何處理。

如果這是任何幫助。


如果您需要更多信息請隨時詢問。

+0

爲什麼這個標籤與Excel,我看不出有什麼練成都在這裏。 – Luuklag

+0

對不起。這是在excels電源查詢中完成的。我會刪除它。 – spyr0

回答

0

看起來像一對多的關係。 COGS表中的值比您需要的更多(可能是其他列填充了其他數據)。

嘗試SELECT DISTINCT限制對唯一值選取的資料欄:

SELECT DISTINCT -- DISTINCT goes here 
V_ARINVOICE_ALL.INVOICE_DATE, 
V_ARINVOICE_ALL.ARCUSTO_COMPANY, 
V_ARINVOICE_ALL.ARCUSTO_CUSTNO, 
V_ARINVOICE_ALL.INVOICE_NO, 
V_GLBATCH_AR_COGS.CREDIT AS "INCOME" 


FROM 
IQMS.V_ARINVOICE_ALL V_ARINVOICE_ALL 


INNER JOIN 
IQMS.V_GLBATCH_AR_COGS V_GLBATCH_AR_COGS 
ON 
V_ARINVOICE_ALL.GLBATCHID_ID = V_GLBATCH_AR_COGS.ID 
AND V_ARINVOICE_ALL.GLPERIODS_ID_AR = V_GLBATCH_AR_COGS.GLPERIODS_ID 
AND V_GLBATCH_AR_COGS.DESCRIP LIKE '%OX01%ITEMS%' AND V_GLBATCH_AR_COGS.ACCT = '3648-00-0' 



WHERE 
V_ARINVOICE_ALL.ARCUSTO_CUSTNO = 'OX01' 
AND 
V_ARINVOICE_ALL.INVOICE_DATE >= TO_DATE('05/04/2016', 'dd/mm/yyyy') 
AND 
V_ARINVOICE_ALL.INVOICE_DATE <= TO_DATE('15/06/2017', 'dd/mm/yyyy') 

ORDER BY 
V_ARINVOICE_ALL.INVOICE_DATE 
+0

感謝您的回覆!唯一的問題是,會有一些行不得不有兩個或三個重複的行不幸:( – spyr0