Номер строки группы SQL Server - PullRequest
0 голосов
/ 30 августа 2018

Мне просто интересно, возможно ли рассчитать уникальный номер строки для групп без использования Group By ...

Мои наборы данных следующие ...

FileSize         FileSize(KB/MB)
--------------------------------
             0      0.00 KB
             0      0.00 KB
            36      0.04 KB
            39      0.04 KB
           425      0.42 KB
           435      0.42 KB
           435      0.42 KB
       1000960      0.95 MB
       1001290      0.95 MB
    1266831853      1.27 GB
    1266831968      1.27 GB
    1312708509      1.31 GB
    1312711756      1.31 GB
    1367911756      1.36 GB

Я хотел бы, чтобы следующие наборы данных выводились для сортировки столбца FileSize (KB / MB) по FileSize в TabularModel ...

FileSizeRank    FileSize    FileSize(KB/MB)
-------------------------------------------
    1                    0      0.00 KB
    1                    0      0.00 KB
    2                   36      0.04 KB
    2                   39      0.04 KB
    3                  425      0.42 KB
    3                  435      0.42 KB
    3                  435      0.42 KB
    4              1000960      0.95 MB
    4              1001290      0.95 MB
    5           1266831853      1.27 GB
    5           1266831968      1.27 GB
    6           1312708509      1.31 GB
    6           1312711756      1.31 GB
    7           1367911756      1.36 GB

Я пробовал это, но это не помогло

ROW_NUMBER() OVER(PARTITION BY [Filesize(KB/MB)] ORDER BY  FileSize) AS FileSizeRank

1 Ответ

0 голосов
/ 30 августа 2018

Вам нужно использовать DENSE_RANK:

SELECT *,DENSE_RANK() OVER( ORDER BY [Filesize(KB/MB)]) AS FileSizeRank
FROM tab

Rextester Demo


EDIT:

Чтобы избежать возможных ORDER BY текстовых проблем, я предлагаю использовать:

SELECT *,DENSE_RANK() OVER( ORDER BY ROUND([File Size]/1000.0,2)) AS FileSizeRank
FROM tab;

Rextester Demo2

...