Я хочу добавить объединенный счетчик для каждого вхождения значения в набор данных из запроса.
Пример набора данных:
ID OtherValue
00A 2ndValue_1
00A 2ndValue_2
00A 2ndValue_3
00A 2ndValue_4
00B 2ndValue_1
00C 2ndValue_1
00D 2ndValue_1
00D 2ndValue_2
Я хочу запрос для создания этого набора данных:
ID OtherValue ConcatinatedCount
00A 2ndValue_1 00A-001
00A 2ndValue_2 00A-002
00A 2ndValue_3 00A-003
00A 2ndValue_4 00A-004
00B 2ndValue_1 00B-001
00C 2ndValue_1 00C-001
00D 2ndValue_1 00D-001
00D 2ndValue_2 00D-002
Я не совсем уверен, как получить это количество в строке.
Оконные функции (также называемые аналитическими функциями или упорядоченными аналитическими функциями) — способ решить эту проблему.
SELECT
ID,
OtherValue,
ID + '-' + FORMAT(ROW_NUMBER() OVER (PARTITION BY ID ORDER BY OtherValue), '000') as ConcatinatedCount
FROM yourtable;
Эта ROW_NUMBER()
оконная функция будет генерировать номер строки в разделе/группе каждого отдельного ID
и упорядочивать этот номер строки по OtherValue
внутри группы. Некоторая конкатенация и форматирование, и он должен выдать то, что вам нужно.
ты опередил меня, опубликовав ответ jajaja
Так это единственный способ или просто предпочтительный метод?
@Mike-SMT Это почти единственный способ. Есть несколько устаревших способов генерации row_numbers по группам, но они УЖАСНЫЕ. Оконные функции заполняют пробел в языке SQL, который необходимо было заполнить.
Я не мог придумать, как сделать это с помощью SQL. Рад узнать, что у нас есть возможность обойти это с помощью этих функций Windows.
Работал как шарм. Просто нужно было добавить правые скобки после
OtherValue
. Я заметил, что оконные функции все чаще появляются в моих исследованиях. Мне нужно время, чтобы разобраться, как они работают.