SQL SUM()函数始终返回0

时间:2012-02-27 12:31:29

标签: asp.net sql sum

我正在使用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

idsizecolor值是正确的,但SUM函数的结果始终为0.如果我在SQL Server上运行查询管理它工作正常。

我尝试过更改

.stock = rowStock(3)

而不是

.stock = rowStock("Total")

但我得到的结果相同。我无法想象我错过了什么。

2 个答案:

答案 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