2016-10-19 9 views
1

시나리오 : 일련의 SQL Server 데이터베이스에 저장된 여러 계정에 대한 청구서가 있습니다.SQL Server : 찾을 수없는 값의 인스턴스

AccountNum  BillNum  BillMonth BillTotal  
--------------------------------------------------- 
123456   123456-1  201601  $100000.00  
123456   123456-2  201602  $100000.00  
123456   123456-3  201603  $100000.00  
123456   123456-4  201604  $130000.00  
456789   456789-1  201601  $250000.00  
456789   456789-2  201602  $250000.00  
456789   456789-3  201603  $250000.00  
456789   456789-4  201604  $200000.00  

내가 주어진 시간 동안> XX % 차이 이상 값/편차를 표시하는 쿼리를 작성하려합니다. 그래서 위의 데이터 세트에서 4 번과 8 번 행은 "정상적인"금액 인 $ 100,000p/월과 상당히 다를 수 있습니다. 잠재적으로 문제를 나타냅니다.

저는 계좌별로 계좌를 평균하는 방법이 필요합니다 (각 계좌마다 청구서/요금이 다릅니다). 해당 월의 편차가 10 % 이상인 곳을 찾아야합니다.

나는 STDEV를 사용해 보았지만 제대로 작동하지는 못했다.

답변

1

다음과 같은 쿼리를 사용하여 시도 할 수 있습니다 :

SELECT AccountNum, BillNum, BillMonth, BillTotal, 
     CASE 
      WHEN ABS(BillTotal - AVG(BillTotal) OVER (PARTITION BY AccountNum)) > 
       STDEV(BillTotal) OVER (PARTITION BY AccountNum) 
      THEN 1 
      ELSE 0 
     END AS deviates 
FROM mytable 

위의 쿼리는 특정 AccountNum에 대한 필드의 평균 값과 표준 편차보다 더 벗어나는 BillTotal 양을 갖는 레코드에 대한 1을 반환합니다 .

+0

감사합니다. 나는 그것이 효과가있을 것이라고 생각한다. 나는이 달에 계정에 대해 여러 가지 청구서가있는 또 다른 문제가 있습니다. 나는 그렇지 않으면 아마 틀린 것일 것이기 때문에 나는 단지 1 개의 계산서가있는 계정을 포함시킬 것이라고 생각한다. – TaylorN