2017-12-11 29 views
0

실제 금액의 1.00 범위에있는 금액 열을 어떻게 쿼리합니까?

예를 들어 AmountPaid = 7.75 인 경우 금액이 6.75 - 8.75 사이 인 경우 모든 결과를 반환하고 싶습니다.

는 내가 뭔가를 간단 내려다 보이는,하지만 지금, 나는 다음과 같은 코드를 알고 ...

Where (vc.AmountPaid >= med.Payment - 1.00 or vc.amountpaid <= med.Payment + 1.00) 
+1

Where (v.AmountPaid med.Payment - 1.00과 med.Payment + 1.00 사이) –

답변

0

교체하거나 함께 키워드를해야합니다. 이

Where (vc.AmountPaid >= med.Payment - 1.00 AND vc.amountpaid <= med.Payment + 1.00) 
1
Where (vc.AmountPaid between med.Payment - 1.00 and med.Payment + 1.00) 
0

당신은 ABS 기능을 내려다 보이는 같은

뭔가.

가장 간단한 방법

는 것이다 찾고있는 것을 얻을 : 나는 수치 차이를 처리하고 때

where abs(AmountPaid-payment) <= 1 

ABS가 좋다. (당신이 복사/SSMS에 붙여 실행 만 할 수있는)이 예 2 주 : 10, 12, 12과 10의 차이는 동일

declare @yourdata table (AmountPaid money, Payment money); 
insert @yourdata values (50.00, 49.12),(100, 100.91),(25,1000),(10,20); 

select AmountPaid, Payment, diff = abs(AmountPaid-payment) 
from @yourdata 
where abs(AmountPaid-payment) <= 1; 

반환

AmountPaid   Payment    diff 
--------------------- --------------------- --------------------- 
50.00     49.12     0.88 
100.00    100.91    0.91 
+1

그 표면에 올바른 동안, 그런 식으로 ABS 기능을 사용하여 쿼리를 sargable 만들었습니다. 여기 좋은 기사가 있습니다 (https://blog.bertwagner.com/how-to-search-and-destroy-non-sargable-queries-on-your-server-ff9f57c7268e). –

+0

@ Katherine Elizabeth Lightsey - 내가 올린 내용은 단지 "올바른 것"이 아니라 핵심에 맞습니다. SARGability의 결여는 이것이 좋은 학습 기회를 가져 오는 방법에 관한 질문 이었기 때문에 최저 투표를 구성해서는 안됩니다. 또한 내 솔루션은 인덱싱 된 뷰로 전환 될 수 있으므로 SARGability는 더 이상 문제가되지 않습니다. –