2012-02-27 5 views
1

내가 SQL 서버와 ASP.NET 플랫폼이 문을 실행하고있어 반환SQL의 SUM() 함수는 항상 0

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, sizecolor 값이 올바른지,하지만 난 그게 잘 작동하는 SQL 서버 관리에 대한 쿼리를 실행하면 SUM 함수의 결과는 항상 0입니다.

나는

.stock = rowStock(3) 

대신

.stock = rowStock("Total") 

의 변경 시도했다 그러나 나는 같은 결과를 얻고있다. 내가 놓친 것을 알아 내지 못한다.

+3

입니까? – gbn

+0

주어진 조건에서 0이 반환되거나 값이 수식의 모든 값을 개별적으로 확인하는 경우가 있습니다. – Myra

+0

@gbn 첫 번째 SUM은 각 제품의 실제 재고를 반환합니다. 두 번째 것은 제작자에게 주문한 단위 수를 반환합니다. 마지막 하나는 생산 결함으로 인해 생산자에게 배송 된 유닛의 수를 반환합니다 –

답변

0

마지막으로 나는 내 자신의 질문에 대한 해결책을 발견했습니다. 쿼리를 데이터베이스의 저장 프로 시저에 저장 했으므로 예상 한대로 작동합니다.

편집

내가 저장 프로 시저를 사용하지 않고 다른 해결책을 발견했습니다. 나는 SQL 문을 실행하기 전에 소문자로 변환된다는 것을 깨달았다. 그래서 storeID 필드에 COLLATE SQL_Latin1_General_CP1_CI_AS을 사용하기로 결정했습니다. 그것은 효과가있다!

최종 SQL 쿼리는 3 개 합계가 개별적으로 무엇을 반환 할

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

내가 볼 수있는 유일한 것은보다

기타 다른 열 이름이 키워드와 질식 "에서"전에 쿼리에서 예상을 나타냅니다 후 여분의 쉼표 "총"..., 내가 바꿀 것 귀하의 질의 ...

SELECT 
     id, size, color, sum(stock + incoming - outgoing) as Total 
    FROM 
    stocks 
    where 
     storeID IN ('E13','E15','E10') 
    GROUP BY 
     id, size, color 
+1

대체 쿼리가 상당히 다른 결과를 반환합니다. storeID가 IN 목록에 없더라도 원래 쿼리는 행을 반환합니다. * 쿼리를 단순화하려는 경우 합계는 컴퓨터 일 수 있습니다. ('E13', 'E15', 'E10') 주식 + 입출력 - ELSE 0 END) ' –

+1

@AndreLoker, 맞습니다. 그러나 특정 매장에 대한 인벤토리를 찾는 것처럼 보였습니다. 대형 재고품 (1000 개 품목)이있는 비즈니스가 있고 염려했던 위치 만 200 개라고 말하면 절대로 볼 수없는 부풀림 목록이 필요하지 않습니다. – DRapp

+0

정확한 요구 사항을 알지 못하면 어떤 방향으로 나아갈 지 말하기가 어렵습니다. 적어도 우리는 질의를 단순화하는 여러 가지 방법을 보여 주었기 때문에 원저자는 자신에게 가장 적합한 것을 고를 수 있습니다. 그래도 원래의 문제는 해결되지 않습니다. –