Добавьте индекс к результатам ORACLE SQL, чтобы сделать результаты уникальными

#sql #oracle

#sql #Oracle

Вопрос:

У меня есть таблица, в которой перечислены идентификаторы групп (от 1 до 6) и название соответствующего инструмента (скажем, A и B) и пользователей в каждой группе. Вот так:

 User ID | Group ID | Tool Name |
User1   | 1        | A         |
User2   | 2        | A         |
User3   | 3        | A         |
User4   | 4        | B         |
User5   | 5        | B         |
User6   | 6        | B         |
User7   | 1        | A         |
User8   | 2        | A         |
User9   | 3        | A         |
User10  | 4        | B         |
User11  | 5        | B         |
User12  | 6        | B         |
...
User999 | 6        | B         |

  

* Отредактировано для наглядности

Разные группы представляют разные уровни доступа в одном и том же инструменте. Я хотел бы запросить таблицу, чтобы получить просто список групп и инструментов, но сделать имена инструментов «уникальными» и представляющими уровень доступа. Таким образом, результат должен быть таким:

 Group ID | Tool Name |
1        | A1        |
2        | A2        |
3        | A3        |
4        | B1        |
5        | B2        |
6        | B3        |
  

Есть идеи? Я попытался вставить идентификатор группы после имени инструмента, но это не так читаемо. Любая помощь будет оценена?

Ответ №1:

Используйте row_number() :

 select t.*, tool || row_number() over (partition by tool order by userid)
from t;
  

Комментарии:

1. Спасибо! К сожалению, это не останавливает подсчет строк. Возможно, я ввел в заблуждение, но таблица намного, намного длиннее, чем просто 6 строк. В настоящее время существуют сотни пользователей, 6 различных инструментов, и у каждого инструмента есть 3 группы пользователей. Когда я попробовал выше, я дошел до B1020. Каждый инструмент имеет только 3 разных уровня доступа. За исключением некоторых, которые имеют только 1 или 2.