テーブルを結合するときに、条件ごとに 2 つの結果が得られ、1 つを削除する必要があるという一般的な問題に遭遇しています。
たとえば、私は今、私が持っている製品コードの在庫と、注文中のものがあるかどうか、およびそれがいつ納期になるかを調べようとしています。各製品コードを一度だけ見たいのですが、表示したばかりのときは正常に機能していました注文の数量ですが、左結合をしなければならなかった期日が必要です。これで、製品コードごとに 2 つの結果が得られました。在庫があるものを示すものと、注文中のものがある場合と納期を示すものを取得しています。注文がない場合は在庫のみを表示し、注文中のものがある場合は在庫と注文を 1 つの行として表示します。両方別々に。
DECLARE @cat VARCHAR(150)
SET @cat = 'crumb' --Put your search string in the single speech marks
SELECT category_treeview_node.ctn_description AS
[Product Category],
variant_detail.vad_variant_code AS [Variant Code],
variant_detail.vad_description AS
[Variant Description],
Sum(variant_transaction_header.vth_current_quantity) AS [Physical Stock],
variant_stock_quantity.vasq_free_stock_quantity AS [Free Stock],
variant_stock_location.vsl_stock_on_purchase_order AS [Stock on order],
purchase_order_header.poh_required_date AS [Due Date]
FROM variant_stock_quantity
INNER JOIN (variant_detail
INNER JOIN variant_category
ON variant_detail.vad_id =
variant_category.vac_vad_id
INNER JOIN category_treeview_node
ON category_treeview_node.ctn_id =
variant_category.vac_ctn_id)
ON variant_stock_quantity.vasq_vad_id = variant_detail.vad_id
INNER JOIN variant_stock_location
ON variant_detail.vad_id = variant_stock_location.vsl_vad_id
LEFT JOIN (variant_transaction_header_total
INNER JOIN variant_transaction_header
ON variant_transaction_header_total.vtht_vth_id =
variant_transaction_header.vth_id)
ON variant_detail.vad_id = variant_transaction_header.vth_vad_id
LEFT JOIN purchase_order_line
ON purchase_order_line.pol_id =
variant_transaction_header.vth_pol_id
AND variant_detail.vad_id = purchase_order_line.pol_vad_id
LEFT JOIN purchase_order_header
ON purchase_order_header.poh_id = purchase_order_line.pol_poh_id
WHERE category_treeview_node.ctn_description = @cat
GROUP BY category_treeview_node.ctn_description,
variant_detail.vad_variant_code,
variant_detail.vad_description,
variant_stock_quantity.vasq_free_stock_quantity,
variant_stock_location.vsl_stock_on_purchase_order,
purchase_order_header.poh_required_date
HAVING variant_stock_quantity.vasq_free_stock_quantity >= 0
現物在庫、空き在庫、注文中のもの、および期日が null であることを示す 1 つの結果と、現物在庫なし、空き在庫、注文中のもの、および期日を示す 1 つの結果が得られます。
どんな助けでも感謝します。