2014-10-01 4 views
0

이것은 근사치와 함께 vlookup을 사용하여 Excel에서 쉽게 처리 할 수 ​​있지만 어떤 이유로 든 SQl과 작동하지 않을 수 있습니다.이 어려운 방법으로 어떤 도움을 주시면 대단히 감사하겠습니다. 여기에 내가 무엇입니까 결과의 예입니다 : 아래 X와 Y 사이의 화폐 가치입니까?

Player ID ADT   ADT Tier 
103   31.25  11 
112   6.03  NULL 
114  498.26  7 
117  1330.82  4 
131   10.01  NULL 

내가 사용하려고 코드입니다 :

여기
Player ID ADT   ADT Tier 
103   31.25  2 
112   6.03  6 
114  498.26  7 
117  1330.82  4 
131   10.01  NULL 

는 샘플이 어떻게 보일지입니다.

Select S.Meta_ID as "Player ID" 
,Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2) as ADT 
,case 
    when cast(Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2)as varchar) between '3500' and '1000000' then '1' 
    when cast(Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2)as varchar) between '2000' and '3499.99' then '2' 
    when cast(Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2)as varchar) between '1500' and '1999.99' then '3' 
    when cast(Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2)as varchar) between '1000' and '1499.99' then '4' 
    when cast(Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2)as varchar) between '750' and '999.99' then '5' 
    when cast(Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2)as varchar) between '500' and '749.99' then '6' 
    when cast(Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2)as varchar) between '300' and '499.99' then '7' 
    when cast(Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2)as varchar) between '150' and '299.99' then '8' 
    when cast(Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2)as varchar) between '75' and '149.99' then '9' 
    when cast(Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2)as varchar) between '40' and '74.99' then '10' 
    when cast(Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2)as varchar) between '15' and '39.99' then '11' 
    Else null 
End as "ADT Tier" 

From dbo.CDS_STATDAY as S 

Where S.GamingDate Between '06/1/2014' and '08/31/2014' 
    And S.IDType = 'P' 
    And S.StatType <> 'Poker' 

Group by S.Meta_ID 
+0

CDS_STATDAY 테이블에서 샘플 데이터를 제공 할 수 있습니까? 또한 RDBMS는 무엇입니까? – radar

+1

숫자 비교를 위해 varchar로 변환하는 이유는 무엇입니까? –

+0

문제는 문자열로 변환 된 숫자를 비교하려고 시도하고 숫자 값만 사용하십시오. 또한 항상 "varchar"를 사용하여 변환 할 때 크기를 지정하면 매우 게으릅니다. "varchar"를 사용할 때의 기본 크기를 아십니까? 귀하의 데이터가 그것에 적합합니까? 크기를 추가하는 데는 많은 시간이 필요하지 않습니다 :'varchar (25)'. –

답변

2

당신은 원인이되는 VARCHAR로 캐스팅하여 결과가 잘못 나오는 이유 인 순으로 비교의 사이. 아래 그림과 같이 캐스트 문을 제거

Select S.Meta_ID as "Player ID" 
,Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2) as ADT 
,case 
    when Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2) between 3500 and 1000000 then 1 
    when Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2) between 2000 and 3499.99 then 2 
    when Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2) between 1500 and 1999.99 then 3 
    when Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2) between 1000 and 1499.99 then 4 
    when Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2) between 750 and 999.99 then 5 
    when Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2) between 500 and 749.99 then 6 
    when Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2) between 300 and 499.99 then 7 
    when Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2) between 150 and 299.99 then 8 
    when Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2) between 75 and 149.99 then 9 
    when Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2) between 40 and 74.99 then 10 
    when Round(Sum(S.TWin)/Nullif(Count(Distinct S.GamingDate),0),2) between 15 and 39.99 then 11 
    Else null 
End as "ADT Tier" 

From dbo.CDS_STATDAY as S 

Where S.GamingDate Between '06/1/2014' and '08/31/2014' 
    And S.IDType = 'P' 
    And S.StatType <> 'Poker' 

Group by S.Meta_ID 

당신이 얻고있는 결과를 설명하기 위해, 알파벳 순으로 31.25하면 해당 행에 대한 ADT 값 2를 얻고있는 이유입니다, 2000 3499.99 사이입니다.

+3

완성도를 위해 '3500'과 '1000000'사이에 '3500 ~ 1000000'사이에 '~'인수를 숫자로 변경해야합니다. –

+0

좋은 지적, 나는 대답을 – SS781

+0

업데이트했습니다. 나는이 숫자를 아주 간단하게 수정 한 SQL에 익숙하지 않은 숫자를 무시할 수 있다는 것을 알지 못해 너무 고맙습니다. 이제 이처럼 계층화해야하는 다른 세 항목에 대해이 작업을 수행하는 코드를 작성하고 4 단계의 최적 계층을 찾는 방법을 알아 내십시오. –

관련 문제