我正在使用SQL Server
的ASP.NET平台上执行此语句SELECT id, size, color,
SUM(CASE WHEN storeID IN ('E13','E15','E10') THEN stock ELSE 0 END)
+ SUM(CASE WHEN storeID IN ('E13','E15','E10') THEN incoming ELSE 0 END)
- SUM(CASE WHEN storeID IN ('E13','E15','E10') THEN outgoing ELSE 0 END)
AS Total
FROM stocks
GROUP BY id, size, color
这是我用来检索获得的值的代码
For Each rowStock In TableStocks.Rows
Dim product As New ProductInfo
With product
.id = rowStock("id")
.size = rowStock("size")
.color = rowStock("color")
.stock = rowStock("Total")
End With
Next
id
,size
和color
值是正确的,但SUM
函数的结果始终为0.如果我在SQL Server上运行查询管理它工作正常。
我尝试过更改
.stock = rowStock(3)
而不是
.stock = rowStock("Total")
但我得到的结果相同。我无法想象我错过了什么。
答案 0 :(得分:1)
最后,我找到了解决自己问题的方法。我已将查询保存到数据库的存储过程中,并且按预期工作。
修改强>
我发现了另一种不使用存储过程的解决方案。我意识到在运行sql语句之前,它已转换为小写。所以我决定在COLLATE SQL_Latin1_General_CP1_CI_AS
字段中使用storeID
,只是试一试。它奏效了!
最终的SQL查询是
SELECT id, size, color,
SUM(CASE WHEN storeID COLLATE SQL_Latin1_General_CP1_CI_AS
IN ('E13','E15','E10') THEN stock + incoming - outgoing ELSE 0 END)
AS Total
FROM stocks
GROUP BY id, size, color
答案 1 :(得分:0)
我唯一看到的是“total”之后的额外逗号,表示在“from”关键字和choking之前的查询中需要另一个列名...
除此之外,我会将您的查询更改为...
SELECT
id, size, color, sum( stock + incoming - outgoing ) as Total
FROM
stocks
where
storeID IN ('E13','E15','E10')
GROUP BY
id, size, color