#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.