2017-04-24 12 views
1

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つしかない場合は2倍の "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

2番目のオプションの種類は、私がしたいことをしますが、どのような表からどの情報を表示するかに基づいて行を表示する方法はありません。このクエリは、明示的に2つのテーブル間の値を平方し、それらが一致するかどうかを比較するために使用されています。 –

+0

もちろん、「D/Eコード」はどのテーブルから来ているのでしょうか? Other_chargeから来た場合、値id Other。値は、Driver Extra Payテーブルからのドライバーの追加料金に格納されている値です。 – HLGEM

+0

あなたの権利私はそれらを識別するために別の列を追加することができます。あなたのd/eコードは他のものと同じように良いアイデアですが、私は実際には他のテーブルから引き出されたものを必要とするかもしれません。ありがとう。 –

関連する問題