我在连接表时遇到了一个常见的问题,即每个条件都有两个结果,而我需要消除一个结果。
例如,我现在正在尝试找出我有什么库存的产品代码,以及我是否有订单上的东西以及它什么时候到期。我只想查看每个产品代码一次,当我只是显示订单上的数量时,它工作得很好,但现在我想要到期日,我必须做一个左连接。现在我得到了每个产品代码的两个结果。我正在得到一个显示它有什么库存和另一个,如果有一些东西上的订单和何时到期。我只希望在没有订单的情况下查看stock,如果有订单上的东西,则将stock和order作为一行,而不是将两者分开。
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,然后一个结果显示没有实物库存,自由库存,订单上的什么和到期日。
感谢您的帮助。
发布于 2013-02-10 22:00:20
我不确定我是否完全理解了这个问题。但一般来说,您不希望使用SQL来执行您所描述的操作。使用SQL返回数据(就像您的查询现在所做的那样),并使用报表编辑器隐藏重复值、在页眉和页脚中汇总数据等。
这是一个简单的劳动分工。SQL返回数据;报表编写器(或其等效编写器)处理表示和布局。
https://stackoverflow.com/questions/14796930
复制相似问题