【发布时间】:2014-09-25 07:04:04
【问题描述】:
我对这个 GROUP BY & Union 语句感到非常困惑。
现在我正在收到这个 O/P。
但我希望我的输出如下所示:
Vendor Name Purchase Order Req Qty Inward Qty
----------------------------------------------------------------------
Philips Lighting PO20140918133011 350 350
(I) Pvt Ltd
要求:
如果我的供应商为空,那么我还必须根据采购订单进行分组。 但是我得到的输出没有满足所有要求有没有什么方法可以仅根据采购订单进行分组。
**查询:**
SELECT
vendor_name,
purchase_order_no,
SUM(ISNULL(InwardQty,0)) AS InwardQty,
SUM(ISNULL(ReqQty,0)) ReqQty
FROM
(
SELECT
vendor_name,
pm.purchase_order_no,
ISNULL(SUM(PIIM.qty),0) AS ReqQty,
0 InwardQty
FROM
RS_Purchase_Order_Master AS PM
LEFT OUTER JOIN RS_Purchase_Invoice_Info_Master AS PIIM ON PIIM.purchase_order_no = PM.purchase_order_no
LEFT OUTER JOIN RS_Vendor_Master AS VM ON VM.vendor_id = PM.vendor_id
WHERE
IsPicreated = 1
GROUP BY
vendor_name,
pm.purchase_order_no
UNION
SELECT
NULL AS vendor_name,
purchase_order_no,
0 AS ReqQty,
ISNULL(SUM(qty),0) AS InwardQty
FROM
RS_GIN_Master
GROUP BY
purchase_order_no
)
AS A
GROUP BY
vendor_name,
purchase_order_no
任何帮助或建议将不胜感激。
提前谢谢你
【问题讨论】:
-
你应该反转你的
ISNULL(SUM(。如果一个值为 null,而其他值为 null,则 sum 将返回 null,您的整个值为 0。SUM(ISNULL(InwardQTY, 0)) -
感谢 paqogomez 先生的建议。但我的主要问题是我得到两行,因为供应商列中的空值我应该如何将两行转换为一行。
-
这就是为什么它是一个评论,而不是一个答案,但是这将是你的结果中的一个问题。您的主要问题是因为您按供应商名称分组。一个 vendor_name 是 phillips,另一个是 null(null 仍然是一个值,如果有意义的话,它与 phillips 不同)。您应该删除 vendor_name,仅按 PO 分组,然后重新加入以获取供应商名称。
标签: sql sql-server group-by sql-server-2012 union-all