선택 쿼리에서 자동 증가 필드를 생성하는 방법


83

예를 들어 나는 2 열이있는 테이블이, first_name그리고 last_name이 값

Ali           Khani
Elizabette    Amini
Britney       Spears
,...

select다음과 같은 테이블을 생성하는 쿼리 를 작성하고 싶습니다.

1     Ali           Khani
2     Elizabette    Amini
3     Britney       Spears
,...

당신의 도움을 주셔서 감사합니다.


1
어떤 RDBMS를 사용하고 있습니까?
peterm

답변:


145

MySql이면 시도해 볼 수 있습니다.

SELECT @n := @n + 1 n,
       first_name, 
       last_name
  FROM table1, (SELECT @n := 0) m
 ORDER BY first_name, last_name

SQLFiddle

그리고 SQLServer의 경우

SELECT row_number() OVER (ORDER BY first_name, last_name) n,
       first_name, 
       last_name 
  FROM table1 

SQLFiddle


1
table1대신 first_name및 에서 모든 열을 선택하려면 어떻게 모두 last_name참조 할 수 있습니까? 시도 SELECT @n := @n + 1 n, *는 작동하지 않습니다
PlainOldProgrammer

대답은SELECT @n := @n + 1 n, table1.*
PlainOldProgrammer

1
MYSQL에서 @n을 초기화해야 할 수도 있습니다. SET @n = 0;
Francisco R

2
@FranciscoR 자세히 살펴보십시오. 이미 하위 쿼리에서 초기화되었습니다 (SELECT @n := 0). 이 접근 방식의 숨겨진 아름다움은 클라이언트 코드에서 여러 명령문이 금지 된 경우 좋은 두 개 대신 단일 명령문이 있다는 것입니다.
peterm

33

여기에 SQL server, Oracle, PostgreSQL지원 창 기능이 있습니다.

SELECT  ROW_NUMBER() OVER (ORDER BY first_name, last_name)  Sequence_no,
        first_name,
        last_name
FROM    tableName

4

자연 분할 값이없고 분할에 관계없이 순서가 지정된 번호를 원하는 경우 상수에 대해 row_number를 수행 할 수 있습니다. 다음 예제에서는 방금 'X'를 사용했습니다. 이것이 누군가에게 도움이되기를 바랍니다.

select 
    ROW_NUMBER() OVER(PARTITION BY num ORDER BY col1) as aliascol1, 
    period_next_id, period_name_long
from 
(
  select distinct col1, period_name_long, 'X' as num
  from {TABLE} 
) as x

1
DECLARE @id INT 
SET @id = 0 
UPDATE cartemp
SET @id = CarmasterID = @id + 1 
GO
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.