2012-03-01 4 views
-2

SQL 쿼리를 사용하여 모든 행에 플래그 1,2를 설정할 수 있습니까? 주문 날짜 필드로 des/asc쿼리를 사용하여 플래그 설정

귀하의 도움을 매우 높이 평가하겠습니다.

예를 들어

:

 

    Id  Name  date  flag 
    9278 david  02/12/2012 1 
    4343 sharon  21/11/2012 2 
    4783 elizabeth 17/11/2012 3 
    47846 john  08/10/2012 1 
    78347 chris  17/09/2012 2 
    37379 Joe   18/06/2012 3 

+0

1, 2 또는 3이어야 할 대상을 결정하는 방법은 무엇입니까? –

+0

귀하의 사례에서 설명한 방식으로 이러한 기록의 순위를 매길 수있는 방법이 없으므로 질문이 의미가 없습니다. 우리가 당신을 도울 수 있도록 정확한 예를 제공해주십시오. –

답변

0

나는 SQL2008의 가정

select *, ROW_NUMBER() OVER (ORDER BY date) as Flag from YourTable 
+0

OK, 질문을 변경 했으므로 더 이상 답변이 유효하지 않습니다. – Tomek

+0

@Oded 질문을 재 형식화했지만 내용은 변경되지 않았습니다. (적어도 지금은 읽을 수 있지만 ...) 어느 쪽이든, 나는 이것이 효과가 있다고 생각하지 않습니다. –

+0

네, 읽기가 어려웠습니다. 처음 세 레코드 만 검사하면 연속 시퀀스가 ​​필요하다고 잘못 생각했습니다. – Tomek

1

귀하의 질문이 좀 불분명하지만, 당신은 ROW_NUMBER 함수와 나머지 연산자의 조합을 사용 할 수도 있습니다 :

with temp as 
(
    select 9278 as num, 'david' as name,  CONVERT(datetime, '02/12/12',3) as date 
    UNION 
    select 4343, 'sharon',  CONVERT(datetime, '21/11/12',3) 
    UNION 
    select 4783, 'elizabeth', CONVERT(datetime, '17/11/12',3) 
    UNION 
    select 47846, 'john',  CONVERT(datetime, '08/10/12',3) 
    UNION 
    select 78347, 'chris' ,  CONVERT(datetime, '17/09/12',3) 
    UNION 
    select 37379, 'Joe' ,  CONVERT(datetime, '18/06/12',3) 
) 

select *, 
     ((ROW_NUMBER() OVER (ORDER BY date desc) + 2) % 3) + 1 as Flag 
from temp 

이 데이터가 일부 프로그래밍 언어에 의해 소비되는 경우, 대신 SQL 코드에 숫자를 추가하십시오.

+0

+1 시퀀스를 1을 기준으로 전환하는 좋은 트릭. – Tomek

관련 문제