У меня проблема, я хочу разбить отсортированную таблицу. Как я могу это сделать?
Я использую SQL Server 2016.
Таблица ввода:
|---------|-----------------|-----------|------------|
| prod | sortcolumn | type | value |
|---------|-----------------|-----------|------------|
| X | 1 | P | 12 |
| X | 2 | P | 23 |
| X | 3 | E | 34 |
| X | 4 | P | 45 |
| X | 5 | E | 56 |
| X | 6 | E | 67 |
| Y | 1 | P | 78 |
|---------|-----------------|-----------|------------|
Желаемый результат
|---------|-----------------|-----------|------------|------------|
| prod | sortcolumn | type | value | rowNr |
|---------|-----------------|-----------|------------|------------|
| X | 1 | P | 12 | 1 |
| X | 2 | P | 23 | 2 |
| X | 3 | E | 34 | 1 |
| X | 4 | P | 45 | 1 |
| X | 5 | E | 56 | 1 |
| X | 6 | E | 67 | 2 |
| Y | 1 | P | 78 | 1 |
|---------|-----------------|-----------|------------|------------|
Я так далеко:
SELECT
table.*,
ROW_NUMBER() OVER(PARTITION BY table.prod, table.type ORDER BY table.sortColumn) rowNr
FROM table
Но это не перезапускает номер строки в 4-й строке, поскольку это тот же продукт и тип. Как я могу перезапускать каждый продукт, а также при каждом изменении типа на основе критериев сортировки, даже если тип возвращается к тому, что уже было раньше? Возможно ли это даже с функцией ROW_NUMBER или мне нужно работать с LEAD, LAG и CASES (что, вероятно, сделает это очень медленно, не так ли?)
Спасибо!
LEAD
и / илиLAG
замедляют выполнение запроса? - person Larnu   schedule 28.06.2018LAG
иLEAD
очень эффективны, судя по моему опыту, и намного лучше, чем выполнениеJOIN
в соответствии сFROM MyTable MT LEFT JOIN MyTable MTl ON MT.ID +1 = MTl.ID
- person Larnu   schedule 28.06.2018