Выберите строки, в которых столбец идентификатора пользователя имеет только указанную строку - PullRequest
0 голосов
/ 07 июля 2019

Я извлек электронную таблицу всех пользователей с полным доступом к нашей ферме SharePoint с помощью PowerShell.

Теперь из этого списка я пытаюсь получить список сайтов, где только администраторы SP являются эксклюзивными владельцами. Я загрузил извлеченную электронную таблицу в Access и пишу запросы для создания различных отчетов.

Все идентификаторы пользователя для одного сайта SP хранятся в ячейке в столбце с именем UserID и разделяются точкой с запятой: User1; User2; и т. Д.

SiteName Url                UserID                
-------- ---------------    ----------------             
Site1    https://test.com   User1;User2;User3;
Site2    https://test2.com  User1;User3;User5;...;User50;

У меня есть таблица со столбцом UserID.

Пример: User1, 2 и 3 - администраторы SP

Row 1 has UserID column values: "User1; User2; User3"
Row 2: "User2; User3;"
Row 3: "User1; User4; .... ;User50;"
Row 4: "User1; User2; User4;... ;User25;"
Row 5: "User3;"

Я пытаюсь создать запрос, в котором только строки, содержащие User1, User2 или User3, существуют в этой ячейке. Что в основном означает, что только строки 1, 2 и 5 возвращаются в результатах. Row3 и Row4 должны не возвращать результат, поскольку в его ячейках есть пользователи, отличные от User1, 2 и 3.

Использование LIKE не помогает в этом, потому что он возвращает каждую строку, где находит одного из этих пользователей. Я не могу использовать NOT LIKE, чтобы исключить оставшихся пользователей, потому что во многих строках в ячейке, имеющей полный доступ, перечислены более 30 пользователей.

Ответы [ 2 ]

1 голос
/ 07 июля 2019

Пробелы (если они есть) внутри столбца UserID усложняют манипулирование строкой столбца.Идея состоит в том, чтобы заменить 'User1', 'User2' и 'User3' пустой строкой, а затем удалить все точки с запятой и все пробелы.Если то, что осталось, имеет length = 0, то эта строка содержит только 'User1' или 'User2' или 'User3' или их комбинации:

select * from tablename
where
len(replace(replace(replace(replace(replace(userid, 'User1', ''), 'User2', ''), 'User3', ''), ';',''), ' ', '')) = 0
0 голосов
/ 07 июля 2019

Если вы можете получить набор всех идентификаторов пользователей, которые являются , а не администраторами SP, то вы можете использовать запрос, подобный следующему, чтобы получить нужные вам строки:

select t1.* 
from YourTable t1 left join NotSPAdmins t2 on t1.UserID like '*' & t2.UserID & '*'
where t2.UserID is null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...