だから私はしばらくここをいじっていましたが、まだこれを理解することができず、最終的に推測方法を試すことをあきらめ、助けを求めています.
データベースに 3 つのテーブルがあります。1 つは請求書レベルの詳細 (顧客、請求書の配送料、支払いなど) を追跡し、もう 1 つは品目の詳細 (注文の品目、コスト/品目、販売価格/品目など) を追跡し、最後のテーブルは出荷 EG に関するデータを保持します。 : 追跡番号、送料などの費用。
ので、私は持っています:
CustomerInvoice
CustomerInvoiceDetail
Shipment
これらのテーブルを結合する単一の選択ステートメントで終わろうとしていますが、出荷テーブルと照合されたときに請求書の詳細を繰り返さないでください。CustomerInvoice は、CustomerInoiceDetail と Shipment の両方と 1 対多の関係を持ちます。これは、注文が複数の項目と複数の出荷を持つことができるためです。
これまでのところ、私は持っています:
SELECT
CustomerInvoice.InvoiceCode, CustomerInvoiceDetail.ItemCode,
CustomerInvoiceDetail.LineNum, Shipment.SourceDocument,
Shipment.TrackingNumber, CustomerInvoiceDetail.ActualCost,
CustomerInvoiceDetail.ExtActualCost, Shipment.Freight AS FreightCost,
CustomerInvoiceDetail.SalesPrice, CustomerInvoiceDetail.ExtPrice,
CustomerInvoiceDetail.SalesTaxAmount, CustomerInvoice.Freight,
CustomerInvoice.FreightTax
FROM
CustomerInvoiceDetail LEFT OUTER JOIN
Shipment RIGHT OUTER JOIN
CustomerInvoice
ON Shipment.SourceDocument = CustomerInvoice.SourceInvoiceCode
ON CustomerInvoiceDetail.InvoiceCode = CustomerInvoice.InvoiceCode
;
理想的には、出荷と注文レベルの詳細を含む行を表示し、請求書の明細の詳細を表示せず、その下にすべての請求書の明細の詳細を表示する結果が必要です。これは、請求書を出荷に内部結合することで実行できると考えていましたが、請求書の詳細からすべての行を任意の基準で他のデータに結合せずにさらに含める方法がわかりません。最終的に必要なのは、最終結果に任意の注文に対して同じ金額が複数回含まれないようにすることです。
参考までに、Gordon Linoff から提出されたクエリを完全な構文で書き直して実行しました。奇妙なことに、現在のところ case ステートメントに問題があるだけです。これは次のようになります。
`--REFERENCE JOIN STATEMENT
SELECT CustomerInvoice.InvoiceCode, NULL as ItemCode,
NULL as LineNum, Shipment.SourceDocument,
Shipment.TrackingNumber, NULL as ActualCost,
NULL as ExtActualCost, Shipment.Freight AS FreightCost,
NULL as SalesPrice, NULL as ExtPrice,
NULL as SalesTaxAmount, CustomerInvoice.Freight,
CustomerInvoice.FreightTax
FROM Shipment RIGHT OUTER JOIN
CustomerInvoice
ON Shipment.SourceDocument = CustomerInvoice.SourceInvoiceCode
union all
select CustomerInvoice.InvoiceCode, CustomerInvoiceDetail.ItemCode,
CustomerInvoiceDetail.LineNum, NULL as SourceDocument,
NULL as TrackingNumber, CustomerInvoiceDetail.ActualCost,
CustomerInvoiceDetail.ExtActualCost, NULL AS FreightCost,
CustomerInvoiceDetail.SalesPrice, CustomerInvoiceDetail.ExtPrice,
CustomerInvoiceDetail.SalesTaxAmount, CustomerInvoice.Freight,
CustomerInvoice.FreightTax
from CustomerInvoice join
CustomerInvoiceDetail
on CustomerInvoice.InvoiceCode = CustomerInvoiceDetail.InvoiceCode
order by InvoiceCode, ItemCode, (case when LineNum is null then 0 else 1 end), LineNum
_`