Оператор MSSQL Select с возрастающим целочисленным столбцом … не от таблицы

Могут быть много решений. В комментариях кодового блока (#) вы найдете несколько ссылок для получения дополнительной информации:

import pandas as pd
import numpy as np
import random
import string

k = 5
N = 10

#http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.randint.html
#http://stackoverflow.com/a/2257449/2901002

df = pd.DataFrame({ 'A' : range(1, N + 1 ,1),
    'B' : np.random.randint(k, k + 100 , size=N),
    'C' : pd.Series(random.choice(string.ascii_uppercase) for _ in range(N)) })

print df
#    A   B  C
#0   1  60  O
#1   2  94  L
#2   3  10  W
#3   4  94  X
#4   5  60  O
#5   6  20  K
#6   7  58  Y
#7   8  40  I
#8   9  49  X
#9  10  65  S

Решение Numpy :

import pandas as pd
import numpy as np

k = 5
N = 10

alphabet = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')

#http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.choice.html

df = pd.DataFrame({ 'A' : range(1, N + 1 ,1),
    'B' : np.random.randint(k, k + 100 , size=N),
    'C' : np.random.choice(np.array(alphabet, dtype="|S1"), N) })

print df
#    A    B  C
#0   1   16  U
#1   2   76  X
#2   3  101  N
#3   4   61  F
#4   5   52  J
#5   6   62  A
#6   7   99  L
#7   8   23  N
#8   9   75  D
#9  10   16  Q

34
задан Cade Roux 11 February 2009 в 14:32
поделиться

3 ответа

Для SQL 2005 и

SELECT ROW_NUMBER() OVER( ORDER BY SomeColumn ) AS 'rownumber',*
    FROM YourTable

на 2000 необходимо сделать что-то вроде этого

SELECT IDENTITY(INT, 1,1) AS Rank ,VALUE
INTO #Ranks FROM YourTable WHERE 1=0

INSERT INTO #Ranks
SELECT SomeColumn  FROM YourTable
ORDER BY SomeColumn 

SELECT * FROM #Ranks
Order By Ranks

, см. также здесь Номер строки

58
ответ дан 27 November 2019 в 16:43
поделиться

Попробуйте ROW_NUMBER ()

http://msdn.microsoft.com/en-us/library/ms186734.aspx

Пример:

SELECT
  col1,
  col2,
  ROW_NUMBER() OVER (ORDER BY col1) AS rownum
FROM tbl
2
ответ дан 27 November 2019 в 16:43
поделиться

Это ужасно и работает плохо, но технически это работает над любой таблицей по крайней мере с одним уникальным полем И работами в SQL 2000.

SELECT (SELECT COUNT(*) FROM myTable T1 WHERE T1.UniqueField<=T2.UniqueField) as RowNum, T2.OtherField
FROM myTable T2
ORDER By T2.UniqueField

Примечание: Если Вы используете этот подход и добавляете оператор Where к внешнему ВЫБОРУ, у Вас есть к добавленному он к внутреннему ВЫБОРУ также, если Вы хотите, чтобы числа были непрерывны.

0
ответ дан 27 November 2019 в 16:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: