SQL案例总和

时间:2014-02-26 15:06:01

标签: tsql

我正在根据客户对产品进行分组,报告我们库存的库存数量和条件代码。我们使用的条件代码不是我们想要报告的,所以我使用CASE来改变它。有一种产品在条件代码中有空值。此产品显示两次,一次条件代码为A(quanitity 7100),一次条件代码为空白(数量4)。我也需要使用条件代码进行分组,因为我们可以在不同的条件下使用相同的产品。对于任何空白,我需要将它们包括为A.使用CASE将空白更改为A报告产品两次,一次使用7100,一次使用4.我需要将这两者相加。这是我目前使用的代码。

SELECT  CLIENTNAME, PRODUCT, SUM(QUANTITY) as 'On Hand',  
        CASE (RESERVED)
            WHEN 'B' THEN 'H'
            WHEN 'I' THEN 'L'
            WHEN '0' THEN 'A'
            ELSE RESERVED
        END AS 'COND_CD'
FROM    binlocat    
GROUP BY 
        CLIENTNAME, PRODUCT, RESERVED
ORDER BY 
        PRODUCT

2 个答案:

答案 0 :(得分:0)

重复CASE中的GROUP BY或执行替换然后求和;

;WITH T(CLIENTNAME, PRODUCT, QUANTITY, RESERVED) AS 
(
    SELECT CLIENTNAME, PRODUCT, QUANTITY,
        CASE (RESERVED)
            WHEN 'B' THEN 'H'
            WHEN 'I' THEN 'L'
            WHEN '0' THEN 'A'
            ELSE RESERVED
        END 
        FROM binlocat
) 
SELECT CLIENTNAME, PRODUCT, SUM(QUANTITY) 
FROM T
GROUP BY CLIENTNAME, PRODUCT, RESERVED
ORDER BY PRODUCT

答案 1 :(得分:0)

您可以像这样包装您的查询:

SELECT CLIENTNAME, PRODUCT, COND_CD, SUM(QUANTITY) AS 'On Hand'
FROM
(
    SELECT  CLIENTNAME, PRODUCT, QUANTITY,
        CASE (RESERVED)
            WHEN 'B' THEN 'H'
            WHEN 'I' THEN 'L'
            WHEN '0' THEN 'A'
            ELSE RESERVED
        END AS 'COND_CD'
    FROM binlocat
)
GROUP BY 
    CLIENTNAME, PRODUCT, COND_CD
ORDER BY 
    PRODUCT

内部SELECT创建一个表,外部选择可以在该表上进行分组。