我正在使用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
)
感谢。
答案 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