如何在不使用SQL聚合数据的情况下使用多个列对每行进行求和?

时间:2017-01-11 19:33:01

标签: mysql sql oracle

我在下面运行我的查询以提取数据,而我有三列我想要使用SUM。但是,它会将数据聚合到一个输出中,而不是为它从中提取的每一行输出数据。

请参阅第二个select语句,如何分离数据?

SELECT a.RTL_TRAN_ID, b.LINEITM_SEQ, b.BEGIN_DATE_TIMESTAMP, b.ITEM_ID, b.ITEM_STYLE_ID, b.ITEM_QUANTITY, b.ITEM_BASE_UNIT_PRICE, b.ITEM_UNIT_PRICE, b.ITEM_EXTENDED_AMT, x.RTL_LOC_ID
FROM CMP_PROMO_TRAN_RESULT AS a
JOIN TRN_LINE_ITEM AS b
ON a.RTL_TRAN_ID = b.RTL_TRANS_ID
JOIN TRN_TRANSACTION AS x 
ON x.RTL_TRANS_ID = a.RTL_TRAN_ID
WHERE a.PROMOTION_ID IN (51)
AND b.lineitm_typcode = 'sale'
AND b.item_base_unit_price <> b.item_unit_price
ORDER BY a.RTL_TRAN_ID

SELECT 
SUM(b.ITEM_QUANTITY) * SUM(b.ITEM_BASE_UNIT_PRICE) - SUM(b.ITEM_EXTENDED_AMT) 
AS 'Discount Given' 
FROM CMP_PROMO_TRAN_RESULT AS a
JOIN TRN_LINE_ITEM AS b 
ON a.RTL_TRAN_ID = b.RTL_TRANS_ID
WHERE a.PROMOTION_ID IN (51) 

1 个答案:

答案 0 :(得分:1)

如果您使用SUM(),则告诉MySQL将同一组的聚合数据转换为一个数字。如果您还没有添加隐式GROUP BY,则会添加。{/ p>

在您的情况下,您似乎不想聚合。然后你应该重写 您的查询是这样的(即只删除SUM()聚合)。

更新了查询(更多列支持调试)

SELECT 
    b.ITEM_QUANTITY
    , b.ITEM_BASE_UNIT_PRICE
    , b.ITEM_EXTENDED_AMT 
    , b.ITEM_QUANTITY * b.ITEM_BASE_UNIT_PRICE - b.ITEM_EXTENDED_AMT 
        AS 'Discount Given' 
FROM 
    CMP_PROMO_TRAN_RESULT AS a
    JOIN TRN_LINE_ITEM AS b 
        ON a.RTL_TRAN_ID = b.RTL_TRANS_ID
WHERE a.PROMOTION_ID IN (51)