【问题标题】:SQL Eliminate one result after joinSQL 加入后消除一个结果
【发布时间】:2013-01-25 15:45:51
【问题描述】:

我在加入表格时遇到了一个常见问题,每个条件我得到两个结果,我需要消除一个。

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

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 

我得到一个结果,其中显示了实物库存、免费库存、订单中的内容和到期日期为空,然后一个结果显示没有实物库存、免费库存、订单中的内容和到期日。

任何帮助表示赞赏。

【问题讨论】:

  • 请为您的 RDBMS(SQL Server?)添加标签。
  • 请显示实际输出和预期输出。这样可以更轻松地查看您要执行的操作。
  • 代码项目 phys 免费订购到期 NB03 面包屑 346.0000 306.0000 80.0000 NB03 面包屑 0.0000 306.0000 80.0000 15/02/2013
  • edit您的问题添加所需的信息。您使用的数据库引擎是您的帖子和标签中必须包含的关键信息。

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


【解决方案1】:

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

这是一个简单的分工。 SQL返回数据;报告编写者(或他们的同等人员)处理演示文稿和布局。

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 2021-03-02
    • 2021-11-03
    • 2013-10-04
    • 2013-09-16
    • 2017-07-01
    • 1970-01-01
    • 2015-09-08
    • 2012-10-26
    相关资源
    最近更新 更多