SQL在连接后消除一个结果

时间:2013-02-10 10:49:47

标签: sql join sql-server-2008-r2 duplicates

我在连接表时遇到一个常见问题,我在每个条件中得到两个结果,我需要消除一个。

例如,我现在正试图找出我所拥有的产品代码库存以及订单中是否有任何内容以及何时到期。我只想查看每个产品代码一次,当我发布时它工作正常只是在订单上显示数量,但现在我想要我必须做一个左连接的截止日期。现在我得到两个产品代码的结果。我得到一个显示它有库存的东西和另一个显示订单上的东西和它的到期时间。我只想看到库存,如果订单没有什么,库存和订单作为一行,如果有订单的东西,而不是两者都是分开的。

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 

我得到一个结果,显示实际股票,免费股票,订单和到期日期为零,然后一个结果显示没有实际股票,免费股票,订单和截止日期。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

我不确定我完全理解这个问题。但总的来说,您不希望使用SQL来执行您所描述的操作。使用SQL返回数据(就像您的查询现在一样),并使用报表编写器隐藏重复值,汇总页眉和页脚中的数据等。

这是一种简单的分工。 SQL返回数据;报告编写者(或其等价物)处理演示文稿和布局。