2016-08-15 19 views
0

私はSQL Serverで作業しています。私はInvoiceInvoiceServiceという2つのテーブルを持っています。左テーブルの値が重複しない内部結合?

請求書

InvoiceID  InvoiceDate  InvoicePrice  InvoicePaidAmount PatientID 
---------------------------------------------------------------------------- 
1    01-01-2016  50     30    1 
2    01-02-2016  100    100    2 

InvoiceService

ID  InvoiceID  ServiceName  ServicePrice 
------------------------------------------------- 
1   1   Dermato    20 
2   1   ophthalmo   30 
3   2   General   100 

マイクエリ:

select 
    ServiceName, ServicePrice, InvoiceID, InvoicePrice, 
    InvoicePaidAmount, PatientID 
from 
    InvoiceService 
inner join 
    Invoice on Invoice.InvoiceID = InvoiceService.InvoiceID 

結果:

ServiceName ServicePrice InvoiceID InvoicePrice InvoicePaidAmount PatientID 

Dermato  20   1   50   30    1 
ophthalmo 30   1   50   30    1 
General  100   2   100   100    2 

私は左の表から非重複値を取得する必要があります:

ServiceName ServicePrice InvoiceID InvoicePrice InvoicePaidAmount PatientID 

Dermato  20   1   50   30    1 
ophthalmo 30   1   0    0    1 
General  100   2   100   100    2 
+0

使用していないDBエンジンにはタグを付けないでください。 –

+0

別の選択肢で左結合を使用してください。 http://www.w3schools.com/sql/sql_distinct.asp、http://www.w3schools.com/sql/sql_join_left.asp – tenten

答えて

1

: の請求書が1つの以上のサービスを持っているとき、私はインボイス価格とInvoicePaidAmountは、この例のように繰り返されないことを望みます私が正しく理解していれば、1つの請求書サービスを「本当に」一致させることができます。

select s.ServiceName, s.ServicePrice, i.InvoiceID, 
     (case when seqnum = 1 then i.InvoicePrice else 0 end) as InvoicePrice, 
     (case when seqnum = 1 then i.InvoicePaidAmount else 0 end) as InvoicePaidAmount, 
     i.PatientID 
from Invoice i join 
    (select s.*, 
      row_number() over (partition by s.InvoiceID order by s.id) as seqnum 
     from InvoiceService s 
    ) s 
    on i.InvoiceID = s.InvoiceID 
+0

大変ありがとうございました。 –

関連する問題