1

2 つのテーブルを持つ以前のクエリで機能する SQL クエリを作成しようとしていますが、それは非常に簡単でした。しかし、これは私を6時間狂気に駆り立てています。

私が抱えている問題は、すべての基準が一致する場合にのみ結果が表示されることであり、それは望ましくありません。データベースにエントリがない場合、フィールドを空白に戻したいです。

テーブルがあり、orderrefno を表示したいと考えています。この時点で、納品書が作成されているかどうかを確認し、作成されている場合は、請求書が作成されているかどうかを確認したいと考えています。次に、それぞれの番号をレポートに戻しますが、存在しない場合は. 納品書が作成されている場合は、注文番号と他の両方が空白になるか、請求書だけが空白になるはずです。

内部、左結合、右結合、完全を使用してクリスタルでクエリを作成しようとしましたが、請求書が存在しない場合は、配送番号と注文番号をリストしたいのですが、そうではありません。

Delphi と v studio のデータソースとマスター ソースでこれを行うことができますが、他の簡単なものは遅いため、SQL を実行したいと考えています。

私のテーブルは

  • 計画
  • 注文
  • コールオフ
  • 配達に電話するlink
  • 配達
  • 請求書への配送link
  • 請求書

テーブルは次のようにリンクされています。

Project.id が主要なエントリ ポイントです。それで

Order.projectid -- プロジェクト.id

Calloff.orderid -- order.id

Callofftodeliverylink.deliveryid -- calloff.id

Delivery.id -- callofftodeliverylink.deliveryid

Deliverytoinvoicelink.deliveryid -- delivery.id

Invoice.id -- deliverytoinvoicelink.invoiceid

大変感謝します

編集:

コードを追加しました。FROM セクションが混乱していて申し訳ありません。Crystal でリンク フィールドを描画し、クエリを表示するように求めたところ、これが表示されました。

SELECT 

 "Projects"."ID", "Orders"."IntOrderNo", "Deliveries"."DeliveryNo", "Projects"."InternalRef",    
 "CallOffs"."ID", "Customers"."Name", "Contacts"."Name", "Invoices"."InvoiceNo"


 FROM   

{oj (((((("GNManager"."dbo"."Invoices" "Invoices" LEFT OUTER JOIN "GNManager"."dbo"."DeliveryToInvoiceLink" "DeliveryToInvoiceLink" ON "Invoices"."ID"="DeliveryToInvoiceLink"."InvoiceID") LEFT OUTER JOIN "GNManager"."dbo"."Deliveries" "Deliveries" ON "DeliveryToInvoiceLink"."DeliveryID"="Deliveries"."ID") LEFT OUTER JOIN "GNManager"."dbo"."CallOffToDeliveryLink" "CallOffToDeliveryLink" ON "Deliveries"."ID"="CallOffToDeliveryLink"."DeliveryID") LEFT OUTER JOIN "GNManager"."dbo"."CallOffs" "CallOffs" ON "CallOffToDeliveryLink"."CallOffID"="CallOffs"."ID") LEFT OUTER JOIN ("GNManager"."dbo"."Projects" "Projects" LEFT OUTER JOIN "GNManager"."dbo"."Orders" "Orders" ON "Projects"."ID"="Orders"."ProjectID") ON "CallOffs"."OrderID"="Orders"."ID") INNER JOIN "GNManager"."dbo"."Customers" "Customers" ON "Orders"."CustomerID"="Customers"."ID") INNER JOIN "GNManager"."dbo"."Contacts" "Contacts" ON "Orders"."ContactID"="Contacts"."ID"}


 WHERE  

 "Projects"."InternalRef"='12/4169'

 ORDER BY 

 "Projects"."InternalRef" DESC, "Orders"."IntOrderNo" DESC

上記のステートメントは機能し、必要なものはすべて生成されますが、Invoices にエントリがある場合のみです。請求書が空白の場合、何も表示されません。

4

1 に答える 1

1

結合ステートメント内のテーブルの順序が問題です。最初のテーブルである請求書は、残りの結果を左右するものです。

プロジェクトに関連するすべての注文が必要な場合は、請求書があるかどうかに関係なく、次のようにします。Projects、Orders、Customers、Contacts には有効な値が必要ですが、それ以外はすべて null になる可能性があることに注意してください。

select
    Projects.ID
    ,Orders.IntOrderNo
    ,Deliveries.DeliveryNo
    ,Projects.InternalRef
    ,CallOffs.ID
    ,Customers.Name
    ,Contacts.Name
    ,Invoices.InvoiceNo
from 
    Projects 
    join Orders on Orders.ProjectID = Projects.ID
    join Customers on Orders.CustomerID = Customers.ID
    join Contacts on Orders.ContactID = Contacts.ID
    left join Callofs on Callofs.OrderID = Orders.ID
    left join CallOffToDeliveryLink on CallOffToDeliveryLink.CallOffID = Callofs.ID
    left join Deliveries on CallOffToDeliveryLink.DeliveryID = Deliveries.ID 
    left join DeliveryToInvoiceLink on DeliveryToInvoiceLink.DeliveryID = Deliveries.ID
    left join Invoices on DeliveryToInvoiceLink.InvoiceID = Invoices.ID
where
    Projects.InternalRef = '12/4169'
order by
    Projects.InternalRef desc
    ,Orders.IntOrderNo desc
于 2013-07-13T21:05:42.483 に答える