2013-02-19 4 views
3

저는 SQL Server 2008을 사용하고 있습니다. 고객을 대상으로 판매 한 결과를 고객이 작년에 구입 한 것과 비교하고 증가율을 계산하고 싶습니다. 모두 정상적으로 작동하지만 고객이 한 달 동안 부정적인 결과를 보게되면 목표 값 & 성장에 대한 잘못된 데이터가 다시 나타납니다.음수 및 음수 합계

Customer  SalesLastYearMonth  SalesThisYearMonth  Target  Growth 
------------------------------------------------------------------------------ 
abcd   -1      15      ????  ??? 

코드 : 당신은 TARGET은 = 16, 성장 = 16, 다음이 그것을해야 할 가정

SELECT 
    Customer, 
    CASE 
     WHEN SalesThisYearMonth IS NULL THEN (SalesLastYearMonth * -1) 
     WHEN SalesLastYearMonth IS NULL THEN SalesThisYearMonth 
     ELSE SalesThisYearMonth - SalesLastYearMonth END as Target, 
    CASE 
     WHEN SalesThisYearMonth IS NULL THEN -1 
     WHEN SalesLastYearMonth IS NULL THEN 1 
     WHEN SalesThisYearMonth = 0 then -1 
     WHEN SalesLastYearMonth = 0 then 1 
     ELSE (SalesThisYearMonth - SalesLastYearMonth)/SalesLastYearMonth END AS Growth 
+1

오류 및 예기치 않은 결과의 예를 들려 줄 수 있습니까? –

+0

@abatishchev 좋은 편집에 감사드립니다! – Wilest

+0

@Ivan G 다음과 같이 나타납니다. 대상 : 16.000, 성장 : -16.000000 – Wilest

답변

0

:

SELECT 
    Customer, 
    CASE 
     WHEN SalesThisYearMonth IS NULL THEN (SalesLastYearMonth * -1) 
     WHEN SalesLastYearMonth IS NULL THEN SalesThisYearMonth 
     ELSE SalesThisYearMonth - SalesLastYearMonth END as Target, 
    CASE 
     WHEN SalesThisYearMonth IS NULL THEN -1 
     WHEN SalesLastYearMonth IS NULL THEN 1 
     WHEN SalesThisYearMonth = 0 then -1 
     WHEN SalesLastYearMonth = 0 then 1 
     ELSE (SalesThisYearMonth - SalesLastYearMonth)/ABS(SalesLastYearMonth) END AS Growth 

을하지만, 나는 정말 성장에 대한 확실하지 않다 SalesLastYearMonth로 나누는 이유가 확실하지 않습니다. 위의 경우에는 작동하지만 SalesLastYearMonth가 -4 인 경우 원하는 값으로 4로 나눕니 까?

0

하면 음수로 분할된다

SalesLastYearMonth = -1 

사용자가 확인 또는 절대 값을 반환 할 필요 하나.

0

약간의 제안. ISNULL() 함수를 사용해보십시오. 선택한 값이 NULL이면 기본 반환 값을 지정할 수 있습니다. 내가 아는 한 훨씬 더 빨리 사건을.

+0

**'1' ** 이렇게하면 중첩 된'ISNULL' 호출이 필요하며 이는'CASE'보다 덜 명확합니다. **'2' ** "빠른"클레임을 뒷받침하는 * 데이터가 있습니까? – michaelb958