Seçme sorgusunda otomatik artış alanı nasıl oluşturulur?


84

Örneğin, 2 sütunlu bir tablom var first_nameve last_namebu değerlerle

Ali           Khani
Elizabette    Amini
Britney       Spears
,...

Bunun selectgibi bir tablo oluşturan bir sorgu yazmak istiyorum:

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

Yardımınız için teşekkürler.


1
Hangi RDBMS kullanıyorsunuz?
peterm

Yanıtlar:


147

MySql ise deneyebilirsiniz

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

SQLFiddle

Ve SQLServer için

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

SQLFiddle


1
Ne tüm sütunları seleect istiyorsanız table1yerine first_nameve last_name, nasıl bütün başvurabilirsiniz? Çalışılıyor SELECT @n := @n + 1 n, *çalışmıyor
PlainOldProgrammer

CevapSELECT @n := @n + 1 n, table1.*
PlainOldProgrammer

1
MYSQL'de @n:SET @n = 0;
Francisco R

2
@FranciscoR Lütfen daha yakından bakın, alt sorguda zaten başlatılmış (SELECT @n := 0). Bu yaklaşımın gizli güzelliği, müşteri kodunuzda birden çok ifade yasaklandığında iki yerine tek bir ifadeye sahip olmanızdır.
peterm

33

burada SQL server, Oracle, PostgreSQLhangi pencere işlevlerini destekler.

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

4

Doğal bölüm değeriniz yoksa ve bölümden bağımsız olarak sıralı bir sayı istiyorsanız, bir sabit üzerinden bir satır_sayı yapabilirsiniz, aşağıdaki örnekte sadece 'X' kullandım. Umarım bu birine yardımcı olur

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.