Объединить количество для каждого дубликата в наборе данных?

Я хочу добавить объединенный счетчик для каждого вхождения значения в набор данных из запроса.

Пример набора данных:

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

Я не совсем уверен, как получить это количество в строке.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оконные функции (также называемые аналитическими функциями или упорядоченными аналитическими функциями) — способ решить эту проблему.

SELECT 
  ID, 
  OtherValue, 
  ID + '-' + FORMAT(ROW_NUMBER() OVER (PARTITION BY ID ORDER BY OtherValue), '000') as ConcatinatedCount
FROM yourtable;

Эта ROW_NUMBER() оконная функция будет генерировать номер строки в разделе/группе каждого отдельного ID и упорядочивать этот номер строки по OtherValue внутри группы. Некоторая конкатенация и форматирование, и он должен выдать то, что вам нужно.

Работал как шарм. Просто нужно было добавить правые скобки после OtherValue. Я заметил, что оконные функции все чаще появляются в моих исследованиях. Мне нужно время, чтобы разобраться, как они работают.

Mike - SMT 02.05.2022 19:08

ты опередил меня, опубликовав ответ jajaja

Josue Barrios 02.05.2022 19:10

Так это единственный способ или просто предпочтительный метод?

Mike - SMT 02.05.2022 19:12

@Mike-SMT Это почти единственный способ. Есть несколько устаревших способов генерации row_numbers по группам, но они УЖАСНЫЕ. Оконные функции заполняют пробел в языке SQL, который необходимо было заполнить.

JNevill 02.05.2022 19:49

Я не мог придумать, как сделать это с помощью SQL. Рад узнать, что у нас есть возможность обойти это с помощью этих функций Windows.

Mike - SMT 02.05.2022 20:13

Другие вопросы по теме