#tsql #sql-server-2008-r2
#tsql #sql-server-2008-r2
Вопрос:
Я пытаюсь перечислить группы внутри определенного представления.
Пример, из этого представления:
ID FK1 FK2 FK3 FK4
104091 10160 1 1 29152
106797 10161 2 1 NULL
34682 10162 1 6 28556
61582 10162 1 6 28557
53045 10163 1 1 29154
23918 10164 1 6 28731
34683 10164 1 6 28729
89003 10164 1 4 28728
50547 10164 1 4 28727
50548 10165 1 6 29846
34684 10165 1 5 29847
23919 10165 1 5 29844
Я хотел бы иметь что-то вроде:
ID FK1 FK2 FK3 FK4 C
104091 10160 1 1 29152 1
106797 10161 2 1 NULL 2
34682 10162 1 6 28556 3
61582 10162 1 6 28557 3
53045 10162 1 1 29154 4
23918 10164 1 6 28731 5
34683 10164 1 6 28729 5
89003 10164 1 4 28728 6
50547 10164 1 4 28727 6
50548 10165 1 6 29846 7
34684 10165 1 5 29847 8
23919 10165 1 5 29844 8
Как вы можете видеть, это выглядит как
ROW_NUMBER() OVER (PARTITION BY FK1, FK2, FK3 ORDER BY FK1, FK2, FK3) AS C
С той лишь разницей, что PARTITION BY сбрасывает row_number для каждой группы. Вместо этого я хотел бы иметь уникальный номер для каждой группы. Больше похоже на GROUP_NUMBER()
Я надеюсь, что вопрос был достаточно ясен 🙂
Ответ №1:
DENSE_RANK() OVER (ORDER BY FK1, FK2, FK3) AS C
Должно делать то, что вам нужно.