使用GROUPBY进行汇总

时间:2016-08-31 05:52:17

标签: sql sql-server

我正在使用SQL Server 2012。

我有以下数据,其中产品A,B,C和D是BundleID'ABCD'的组成部分。我正在做一个由BundleID做组合的价格的总和。这里的问题是我希望它抛出一个错误,而不是在产品价格为0时做总和。有人可以在这里建议一个出路。

我们可以用一些虚拟值替换0的evrywhere,以便在执行求和时抛出错误吗?

BundleID    Product  Price
ABCD        A         5
ABCD        B         10
ABCD        C         0
ABCD        D         20
EFGH        E         50
EFGH        F         100
EFGH        G         50
EFGH        H         10


WITH BUNDLE_SUM AS (
select S.BundleID,
        SUM(CONVERT(float,LV.VALUE_0)) AS BUNDLE_SUM 
        from PM_SCOPE S
        JOIN PM_LOOKUP_VALUE LV ON LV.SCOPE_ID = S.SCOPE_ID
        WHERE LD.LOOkUP_NAME = 'Bundle Details'
        GROUP BY S.BundleID
)

感谢。

3 个答案:

答案 0 :(得分:0)

select bundleid,
sum(Case when price=0 then 'string' else price end)
from
your table
group by bundleid
如果你的价格是int,那么

想法是string + int转换会失败。

答案 1 :(得分:0)

您可以如下所示:

DECLARE @Tbl TABLE (BundleID NVARCHAR(10), Price FLOAT)
INSERT INTO @Tbl
VALUES
('ABCD', 5  ),
('ABCD', 10 ),
('ABCD', 0  ),
('ABCD', 20 ),
('EFGH', 50 ),
('EFGH', 100),
('EFGH', 50 ),
('EFGH', 10  )


SELECT 
    BundleID,
    IIF(MIN(Price) = 0, 'INCORRECT', CAST(SUM(Price) AS NVARCHAR(10))) TotalPrice
FROM 
    @Tbl
GROUP BY
    BundleID

结果:

BundleID    TotalPrice
ABCD        INCORRECT
EFGH        210

答案 2 :(得分:0)

嗨,只要检查表中是否存在零,如果是提高错误,否则做组或者你想做什么..即

   select S.BundleID,
        SUM(CONVERT(float,LV.VALUE_0)) AS BUNDLE_SUM 
        from PM_SCOPE S
        JOIN PM_LOOKUP_VALUE LV ON LV.SCOPE_ID = S.SCOPE_ID
        WHERE LD.LOOkUP_NAME = 'Bundle Details' and 
               s BundleID not in (select distinct BundleID from PM_SCOPE S
             JOIN PM_LOOKUP_VALUE LV ON LV.SCOPE_ID = S.SCOPE_ID and LV.VALUE_0=0   )
        GROUP BY S.BundleID