0

特定の請求書番号を取得するには、5 つのテーブルに参加する必要があります。

テーブルは

  1. 明細書、
  2. Service_bill
  3. ダメージ_コスト
  4. Extraperson_cost
  5. Advance_cost

を除きbill、他のすべてのテーブルは null 値を格納できます。

私のクエリは以下のようなものです...

select   bill.bill_no,
         bill.total,
         bill.discount,
         bill.to_be_paid,
         isnull(Service_bill.total_amt,0) as ServiceCharge,
         isnull(Damage_cost.total_amt,0) as DamageCost,
         isnull(Extraperson_cost.total_amt,0) as ExtraCost,
         isnull(Advance_cost.total_amount,0) as Advance 
from     bill 
left join Advance_cost       on bill.bill_no=Advance_cost.room_bill_no and bill.bill_no='57' 
inner join Service_bill      on bill.bill_no=Service_bill.room_bill_no 
inner join Damage_cost       on bill.bill_no=Damage_cost.room_bill_no 
inner join Extraperson_cost  on bill.bill_no=Extraperson_cost.room_bill_no

現在、結合条件が真になっているデータを返します。

最初のテーブルには値が必要であり、他のテーブルは値nullのみであるため、最初のテーブルを完全に返す必要があります。でも、どうしてこうなったのかわからない!

4

2 に答える 2

2

内部結合は、他の 4 つのテーブルすべてにレコードがある人の請求書のみを検索していることを意味します。代わりに外部結合を使用してください。

また、請求書 57 の「advance_cost」にレコードがあるアイテムに結果を制限しています。それはおそらく考えではありません...

于 2013-06-27T13:36:43.083 に答える
0

ありがとうネビル k... 外部結合を使用して取得しました...

select bill.bill_no,bill.total,bill.discount,bill.to_be_paid,
       isnull(Service_bill.total_amt,0) as ServiceCharge,
       isnull(Damage_cost.total_amt,0) as DamageCost,
       isnull(Extraperson_cost.total_amt,0) as ExtraCost,
       isnull(Advance_cost.total_amount,0) as Advance 
from   bill 
left join Advance_cost           on bill.bill_no=Advance_cost.room_bill_no 
left outer join Service_bill     on bill.bill_no=Service_bill.room_bill_no 
left outer join Damage_cost      on bill.bill_no=Damage_cost.room_bill_no 
left outer join Extraperson_cost on bill.bill_no=Extraperson_cost.room_bill_no
where  bill.bill_no='57'
于 2013-06-27T13:44:59.900 に答える