Функция SQL SUM () всегда возвращает 0 - PullRequest
1 голос
/ 27 февраля 2012

Я выполняю этот оператор на платформе ASP.NET с SQL Server

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, он работает нормально.

I 'мы пытались изменить

.stock = rowStock(3)

вместо

.stock = rowStock("Total")

, но я получаю тот же результат.Я не могу понять, что мне не хватает.

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Наконец-то я нашел решение своего вопроса.Я сохранил свой запрос в хранимой процедуре в базе данных, и он работает как я ожидал.

РЕДАКТИРОВАТЬ

Я нашел другое решение без использования хранимых процедур.Я понял, что перед запуском оператора 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
0 голосов
/ 27 февраля 2012

Единственное, что я вижу, это дополнительная запятая после «итого», которая указывает на то, что в запросе ожидается другое имя столбца перед ключевым словом «from» и удушье ...

Кроме этого, я быизмените ваш запрос на ...

SELECT
      id, size, color, sum( stock + incoming - outgoing ) as Total
   FROM
     stocks 
   where
      storeID IN ('E13','E15','E10')
   GROUP BY 
      id, size, color
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...