【发布时间】:2017-09-24 02:20:33
【问题描述】:
我正在尝试在下面的查询(这将是另一个更大查询的子查询)中将 VARCHAR 转换为可以测量为 0 的值 - 不确定要使用什么值。我收到错误"operand data type is invalid in the sum operator" 这是我第一次遇到这种情况。最终目标是说“当值为'L'时返回0,否则返回1”另外DEL_INDICATOR是PO_ITEM表中的一个字段,但我在SELECT中省略了。
这是更新后的代码:
SELECT G.order_no AS 'GPS_ORDER_#',
G.order_status AS 'GPS_ORDER_STATUS',
G.cst_order_no AS 'GPS_CUSTOMER_PO_#',
H.PO_NUMBER AS 'SAP_PO_#',
P.PO_ITEM_NUMBER,
P.DEL_INDICATOR
FROM
(SELECT order_no,
order_status,
cst_order_no
FROM asagdwpdx_prod.dbo.SimoxOrder1
UNION ALL
SELECT order_no,
order_status,
cst_order_no
FROM asagdwpdx_prod.dbo.SimoxOrder2
UNION ALL
SELECT order_no,
order_status,
cst_order_no
FROM asagdwpdx_prod.dbo.SimoxOrder3) G
JOIN PDX_SAP_USER.dbo.VW_PO_HEADER H ON G.order_no = H.AHAG_NUMBER
JOIN PDX_SAP_USER.dbo.VW_PO_ITEM P ON H.PO_NUMBER = P.PO_NUMBER
WHERE G.order_status = '10'
AND NOT EXISTS (
SELECT P1.PO_NUMBER,
P1.PO_ITEM_NUMBER,
SUM(CASE
WHEN CAST(P1.DEL_INDICATOR AS INT) = 'L'
THEN '0'
ELSE '1'
END AS [SUM_DEL]) AS [SUM]
FROM PDX_SAP_USER.dbo.VW_PO_ITEM P1
WHERE P1.PO_NUMBER = H.PO_NUMBER
GROUP BY P1.PO_NUMBER,
P1.PO_ITEM_NUMBER,
CASE
WHEN P1.DEL_INDICATOR = 'L'
THEN '0'
ELSE '1'
END
HAVING SUM (CASE
WHEN CAST(P1.DEL_INDICATOR AS INT) = 'L'
THEN '0'
ELSE '1'
END) > '0')
【问题讨论】:
-
sum 是一个聚合,使用它你必须使用 group by 子句,或者让我们知道,sum 在这里对你没用?
-
感谢您的回复 - 我将添加群组,因为这很有意义并感谢您的帮助
标签: sql sql-server casting type-conversion varchar