Sql 使用GROUPBY进行求和

Sql 使用GROUPBY进行求和,sql,sql-server,Sql,Sql Server,我正在使用SQL Server 2012 我有以下数据,其中产品A、B、C和D是BundleID“ABCD”的组件。我正在做一个价格总和做一个groupby BundleID。这里的问题是,我希望它抛出一个错误,而不是在产品价格为0的情况下进行求和。谁能给我建议一条出去的路吗 我们可以用一些伪值替换0的evrywhere,以便在求和时抛出错误吗 BundleID Product Price ABCD A 5 ABCD B 10

我正在使用SQL Server 2012

我有以下数据,其中产品A、B、C和D是BundleID“ABCD”的组件。我正在做一个价格总和做一个groupby 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
)
谢谢

select bundleid,
sum(Case when price=0 then 'string' else price end)
from
your table
group by bundleid
idea是
string
+
int
如果您的价格是int,转换将失败

idea是
string
+
int
转换将失败,如果您的价格是int..

您可以如下所示:

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
您可以按以下方式进行操作:

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

您好,请检查表中是否存在零,如果是,请引发错误,否则请执行组或您想执行的操作。。即

   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

您好,请检查表中是否存在零,如果是,请引发错误,否则请执行组或您想执行的操作。。即

   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


为什么不排除那些
价格为0
?为什么不在where子句中添加另一个条件,例如where和LD.price>0?LV.VALUE\u 0是否与示例数据中定义的价格字段相同?价格列的数据类型是什么?LV.VALUE_0实际上是价格列。Squirrel-想法是只有当捆绑包的所有组件都有价格时,才有捆绑包总和。如果缺少一个价格(表示为0),那么我们得到的捆绑总和是不正确的。为什么不排除那些价格为0的价格呢?为什么不在where子句中添加另一个条件,例如where和LD.price>0?LV.VALUE\U 0是否与示例数据中定义的价格字段相同?价格列的数据类型是什么?LV.VALUE_0实际上是价格列。Squirrel-想法是只有当捆绑包的所有组件都有价格时,才有捆绑包总和。如果缺少一个价格(即0),那么我们得到的捆绑价格总和是不正确的。我希望我的查询不会以某种方式计算整个捆绑价格,即使只有一个产品缺少价格。因此,在我上面的示例中,C的价格为0,因此不应计算bundleID ABCD的价格,但是bundleID EFGH的价格应该可以。我尝试了执行以下操作,但它为整个查询提供了一个错误。sandeep rawat-感谢sandeep。我还没有完全测试过这个,但我有一种感觉,这会起作用。嗨,Sandeep-再次需要你的帮助。这个有个小问题。我意识到我还需要做一个groupby COUNTRYID。因此,在这种情况下,如果我使用相同的查询,它将排除所有国家的所有bundleID,即使其中任何一个国家只有一个组件的价格为0。你能帮我提个建议吗。谢谢,请分享完整的场景,你需要什么,我会回应的。我无法理解你需要在哪里按a和plz共享表结构分组…这里或vi邮件。我希望我的查询不会以某种方式计算整个捆绑价格,即使只有一个产品缺少价格。因此,在我上面的示例中,C的价格为0,因此不应计算bundleID ABCD的价格,但是bundleID EFGH的价格应该可以。我尝试了执行以下操作,但它为整个查询提供了一个错误。sandeep rawat-感谢sandeep。我还没有完全测试过这个,但我有一种感觉,这会起作用。嗨,Sandeep-再次需要你的帮助。这个有个小问题。我意识到我还需要做一个groupby COUNTRYID。因此,在这种情况下,如果我使用相同的查询,它将排除所有国家的所有bundleID,即使其中任何一个国家只有一个组件的价格为0。你能帮我提个建议吗。谢谢,请分享完整的场景,你需要什么,我会回应的。我无法理解你需要在哪里做分组和plz共享表结构…这里或vi邮件。