Я пытаюсь получить номер индекса / строки вхождения столбца в наборе данных для получения результата, аналогичного следующему:
| Make | Model | Option | Model Index |
├-------------+----------+-----------+-------------┤
| Lamborghini | Diablo | SE30 Jota | 1 |
| Lamborghini | Diablo | SE30 | 1 |
| Lamborghini | Cala | | 2 |
| Pontiac | Trans AM | GTA | 1 |
| Pontiac | Trans AM | Firefox | 1 |
| Pontiac | GTO | Judge | 2 |
| Pontiac | Fiero | GT | 3 |
Обратите внимание, что индекс модели должен повторяться для автомобилей той же марки и модели с другим параметром, но также должен сбрасываться при изменении модели. Мне удалось найти SQL, чтобы выполнить сброс при внесении изменений, но как только я включу столбец параметров, я получу неправильные результаты.
SELECT
Makes.Name,
Models.Name,
Options.Name,
ROW_NUMBER() OVER (PARTITION BY Makes.Id ORDER BY Models.Name) [Model Index]
FROM
Makes
INNER JOIN
Models ON Models.MakeId = Makes.Id
INNER JOIN
Options ON Options.ModelId = Models.Id
Результат из этого SQL (не желательно):
| Make | Model | Option | Model Index |
├-------------+----------+-----------+-------------┤
| Lamborghini | Diablo | SE30 Jota | 1 |
| Lamborghini | Diablo | SE30 | 2 |
| Lamborghini | Cala | | 3 |
| Pontiac | Trans AM | GTA | 1 |
| Pontiac | Trans AM | Firefox | 2 |
| Pontiac | GTO | Judge | 3 |
| Pontiac | Fiero | GT | 4 |
Возможно, я ошибаюсь в том, что я использую ROW_NUMBER
в своем запросе, и я не думаю, что номер строки может повторяться в данном разделе. Я думаю, что мне нужен SomethingElse(PerhapsSomeReferenceToModel) OVER (PARTITION BY Makes.Id ORDER BY Models.Name)
, но я не знаю, каким должен быть SomethingElse(PerhapsSomeReferenceToModel)
!