2017-04-24 50 views
1

我想知道是否有任何方法可以擺脫它創建的重複行信息,以便在一個表中有2個項目時填充結果中的空間,但在另一箇中只有1個。我嘗試了不同的連接和一組,並且都沒有工作。我想我需要某種嵌套的子查詢或某種限制或rownum = 1條件。感謝您提供的任何幫助。擺脫加入的SQL查詢中的重複項

我的代碼:

select distinct 
    Driver_Extra_Pay.Order_ID as 'Order', 
    Deduct_Code_ID as 'D/E Code', 
    Short_Desc as 'Pay Description', 
    Driver_Extra_Pay.Amount as 'Pay Amount', 
    Driver_Extra_Pay.Amount_D as 'Pay Date', 
    Other_Charge.Descr as 'Charge Description', 
    Other_Charge.Amount as 'Charge Amount', 
    Other_Charge.Amount_D as 'Charge Date' 

from 
    Driver_Extra_Pay 
inner join 
    Other_Charge on Other_Charge.Order_ID = Driver_Extra_Pay.Order_ID 

where Driver_Extra_Pay.Amount_D between '03/29/2016' and '03/30/2016' 

order by Driver_Extra_Pay.Order_ID 

這是結果我得到。它是這樣寫的,用作比較工具,但是當它只有1時,它會給出雙「Lumper」條目。似乎它只是複製它來填充空白區域。

enter image description here

我想它看起來像這樣的輸出,而不是,但我不知道的編碼來做到這一點。

enter image description here

+2

他們不重複。他們有不同的收費信息。 – Barmar

+1

不,SQL不能像那樣工作。當其他行在這些列中具有相同的值時,它不會在某些行的列中「屏蔽」值。每一行都有自己的一組值。我們能否得到像返回的結果,是的,我們可以做到這一點。但是,執行該操作所需的語法很尷尬,並且在SQL約定面前蒼蠅。不要在SQL中執行它,在客戶端執行它。 – spencer7593

+2

如果要隱藏某些列的重複項,請在處理結果的應用程序代碼中執行此操作。它可以檢查這些列是否與前一行相同,並保留爲空。 – Barmar

回答

1

要顯示數據的方式不會在SQL工作。如果您想要在表示層中,可以用這種方式顯示它。但是由於其他費用似乎並不直接與駕駛員額外支付相關,也許您真正需要獲得適當數據的是UNION ALL。這將在兩個表格中返回該日期範圍內的所有費用,以便稍後在需要時進行總計。

SELECT * 
    FROM 
    (select distinct 
     Driver_Extra_Pay.Order_ID as 'Order', 
     Deduct_Code_ID as 'D/E Code', 
     Short_Desc as 'Description', 
     Driver_Extra_Pay.Amount as 'Amount', 
     Driver_Extra_Pay.Amount_D as 'Date' 
    from 
     Driver_Extra_Pay 
    where Driver_Extra_Pay.Amount_D between '03/29/2016' and '03/30/2016' 
    UNION ALL 
    select distinct 
     Other_Charge.Order_ID as 'Order', 
     'Other' as 'D/E Code', 
     Other_Charge.Descr , 
     Other_Charge.Amount, 
     Other_Charge.Amount_D, 
    from 
     Other_Charge 
    where Other_Charge .Amount_D between '03/29/2016' and '03/30/2016') a 
    order by [Order] 

該查詢將報告沒有相應的驅動額外支付記錄(當前您的查詢不會。)如果你需要,那就試試這個其他費用:

SELECT * 
FROM 
(select distinct 
    Driver_Extra_Pay.Order_ID as 'Order', 
    Deduct_Code_ID as 'D/E Code', 
    Short_Desc as 'Description', 
    Driver_Extra_Pay.Amount as 'Amount', 
    Driver_Extra_Pay.Amount_D as 'Date' 
from 
    Driver_Extra_Pay 
where Driver_Extra_Pay.Amount_D between '03/29/2016' and '03/30/2016' 
UNION ALL 
select distinct 
    Other_Charge.Order_ID as 'Order', 
    'Other' as 'D/E Code', 
    Other_Charge.Descr , 
    Other_Charge.Amount, 
    Other_Charge.Amount_D, 
from 
    Driver_Extra_Pay 
inner join 
    Other_Charge on Other_Charge.Order_ID = Driver_Extra_Pay.Order_ID 
where Driver_Extra_Pay.Amount_D between '03/29/2016' and '03/30/2016') a 
order by [Order] 
+0

第二種選擇做我想做的,但沒有辦法根據行顯示的方式來告訴哪些信息來自哪個表。這個查詢被明確用於在兩個表格之間對數值進行平方,並比較它們以查看它們是否匹配。 –

+0

當然,你可以,'D/E代碼'telss是哪個表。價值ID其他如果它來自Other_charge。價值是無論存儲在司機額外支付從司機額外支付表中的人。 – HLGEM

+0

您的權利,我可以添加另一列來識別它們。你的d/e代碼是一個好主意,但我實際上可能需要從其他表中取出。謝謝。 –