1

テーブルを結合するときに、条件ごとに 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 つの結果が得られます。

どんな助けでも感謝します。

4

1 に答える 1

0

質問を完全に理解しているかどうかはわかりません。しかし、一般的に、SQL を使用して記述していることを実行したくはありません。SQL を使用してデータを返し (現在のクエリのように)、レポート ライターを使用して繰り返し値を非表示にしたり、ヘッダーとフッターでデータを要約したりします。

単純な分業です。SQL はデータを返します。レポート作成者 (または同等の) がプレゼンテーションとレイアウトを処理します。

于 2013-02-10T14:00:20.497 に答える