2016-12-18 4 views
1

제목에 명시된 바와 같이 Access에서 일부 SQL을 실행하면 세 가지 기준에 따라 0/1 변수가 제공됩니다. 첫째, 새로운 변수는 A 열에있는 모든 값을 비교해야합니다. 둘째로, B 열의 값이 가장 큰 경우 (내 경우에는 틀림), C 열의 값이 가장 큰지를 확인해야합니다 (제 경우에는 해야합니다).SQL 0/1 변수에 액세스, 3 가지 기준 : 1. A 열의 값이 동일합니다. 2. B 열의 값이 가장 크지 않습니다. 3. C 열의 값이 가장 큼

일반적으로 한 행의 열에서 간단한 IIf 문을 실행하지만 여기서는 같은 값의 열 A의 모든 값을 비교해야합니다. "가장 크지 않은" 값이 C 열의 해당 "최대 값"과 일치하는지 확인하십시오.

많은 토론에서이 목적을 위해 새 쿼리를 작성해야하지만이 작업을 수행 할 수 있습니까? 질의하고 D 열에 새로운 변수를 가져 와서 0/1 변수를 제공합니까?

는 완벽하게 명확 내 데이터는 다음과 같이 보입니다 만들려면 : 행의 thousinds의

A  B  C 
10 4 12-04-2014 
10 5 02-17-2015 
10 7 08-11-2016 
10 8 08-31-2016 
10 6 09-05-2016 

그리고있을 것 만흥을, 어디 소위 10.

에서 다른 것 이 경우 마지막 열만 D 열에 값 1을 가져 오지만 열 A의 ID 값에 대해 B 열의 가장 높은 값이 아닙니다.

모든 도움을 주실 수 있습니다!

  • 마크
+0

, 당신은에서 가장 높은 값을 선택 할 수 있도록하려면 C 열을 만들고 D 열의 해당 행에 값 1을 할당합니다. – kplus

+0

정확하지 않습니다. 그것은 단지 첫 번째 기준입니다. D의 값 1은 C의 값이 가장 높으면 B의 값이 가장 높지 않은 경우에만 얻을 수 있습니다. 그리고 A의 값이 행간에 동일하다는 B와 C의 값만 비교할 수 있다는 점을 고려해야합니다. –

+0

문제는 필자가 주어진 단계로 되돌아 가기를 측정해야하기 때문에 B 열이 중요한 이유이며이 열에서 값이 가장 높을 수는 없습니다. –

답변

0
SELECT x.a,x.b,x.c, 
    CASE 
    WHEN x.b<>(SELECT max(xx.b) FROM yourtable xx WHERE xx.a=x.a) 
    AND x.c=(SELECT max(xx.c) FROM yourtable xx WHERE xx.a=x.a) 
    THEN 1 
    ELSE 0 
    END AS d 
FROM yourtable x 

OVER 사용 (x.a BY 파티션)을보다 효율적 겠지만, 액세스 AFAIK이 허용하지 않습니다.

0

MySQL은, 당신은이 작업을 수행 할 수 있습니다으로 :

select t.*, 
     iif(x.b <> (select max(tt.b) from t as tt where tt.a = t.a) and 
      x.b = (select max(tt.c) from t as tt where tt.a = t.a), 1, 0 
     ) as flag 
from t; 
당신이 사용하는 통합 처리 할 수 ​​

: 일반 용어에서

select t.*, 
     iif(tt.maxb <> t.b and tt.maxc = t.c, 1, 0) as flag 
from t inner join 
    (select tt.a, max(tt.b) as maxb, max(t.c) as maxc 
     from t as tt 
     group by tt.a 
    ) as tt 
    on tt.a = t.a;