2016-08-31 51 views
1

我使用SQL Server 2012的做算术USING GROUPBY

我有以下数据,其中所述的产品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 
) 

谢谢。

+0

为什么不只是排除那些'价格是0'? – Squirrel

+0

为什么不给where子句添加其他条件,如WHERE AND LD.Price> 0? –

+0

是LV.VALUE_0样本数据中定义的相同价格字段?什么是价格列的数据类型? –

回答

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 
+0

我想我的查询以某种方式不计算整个捆绑价格,即使只有一个产品缺少价格。所以在我上面的例子中,C的价格是0,所以bundleID ABCD的价格不应该被计算,但是它应该适用于bundleID EFGH。 – Newbie

+0

我试着做了以下,但它给整个查询一个错误。 – Newbie

+0

确定在这种情况下使用不在...我将更新答案 –

0
select bundleid, 
sum(Case when price=0 then 'string' else price end) 
from 
your table 
group by bundleid 

想法是string + int转换将失败,如果你的价格为int ..

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