Я написал отчет, чтобы узнать общее количество участников сразу в нескольких коллекциях. Он выполняется, но когда это происходит, только первая коллекция в списке возвращает свое фактическое членство. Остальные возвращают ненужные данные. Это среда SCCM 1610 на виртуальной машине Server 2008R2. Я создаю отчет в SQL Server Report Builder 3.0. Мое тестирование запускает команду execute в конструкторе запросов, а затем сравнивает результаты с информацией о членстве в этой коллекции в консоли Config Manager. Чтобы более полно объяснить мою проблему, вот код для одной коллекции:
SELECT
v_Collection.Name,
v_Collection.Comment,
v_Collection.CollectionID,
COUNT(*) AS [Members]
FROM
v_Collection,
v_FullCollectionMembership
WHERE
v_Collection.CollectionID = v_FullCollectionMembership.CollectionID
AND v_Collection.CollectionID LIKE 'XXXXXX01'
GROUP BY
v_Collection.Name,
v_Collection.Comment,
v_Collection.CollectionID
ORDER BY
v_Collection.Name
Приведенный выше код вернет это:
Если я добавлю оператор OR и другую подобную коллекцию:
SELECT
v_Collection.Name,
v_Collection.Comment,
v_Collection.CollectionID,
COUNT(*) AS [Members]
FROM
v_Collection,
v_FullCollectionMembership
WHERE
v_Collection.CollectionID = v_FullCollectionMembership.CollectionID
AND v_Collection.CollectionID LIKE 'XXXXXX01'
OR v_Collection.CollectionID LIKE 'XXXXXX02'
GROUP BY
v_Collection.Name,
v_Collection.Comment,
v_Collection.CollectionID
ORDER BY
v_Collection.Name
Вот результат:
CollectionID XXXXXX02 не имеет более 900 000 участников. Их меньше 200. Если посмотреть на коллекцию в ConfigMgr, это видно, и я достаточно уверен, что в этой коллекции нет миллиона мошеннических устройств.
Больше всего меня сбивает с толку, когда я добавляю последовательные коллекции, каждая после первой имеет тот же номер, и чем больше коллекций в списке, тем больше он. Так, например, без дополнительных снимков экрана, если я добавлю третью коллекцию, результаты будут следующими:
CollID - MemberCount
XXXXXX01 - 1944
XXXXXX02 - 940519
XXXXXX03 - 940519
Если я добавлю четвертую коллекцию, результат будет следующим:
CollID - MemberCount
XXXXXX01 - 1944
XXXXXX02 - 940568
XXXXXX03 - 940568
XXXXXX04 - 940568
Хочу отметить, что эти цифры не увеличиваются каждый раз на счет сбора. Разница между плохим числом с тремя коллекциями и номером с четырьмя коллекциями составляет 49, но четвертая коллекция насчитывает пару тысяч членов.
Я уверен, что это связано с моим незнанием как SQL, так и / или общего кодирования, но даже в команде опытных системных администраторов я один из немногих парней, которые попытаются написать что-то подобное без большого опыта, и никто в нашей команде не имеет большого опыта работы с SQL или запросами, поэтому я де-факто SCCM Reporting Guy. Большую часть времени я могу обойтись без кода из существующих отчетов и из Интернета, но этот меня поставил в тупик. Спасибо, что нашли время изучить мою проблему.
Я обновил ваш запрос, чтобы он работал корректно.
SELECT
Coll.Name as 'Collection Name',
Coll.Comment as 'Comment',
Coll.CollectionID as 'Collection ID',
COUNT(*) AS 'Members'
FROM
dbo.v_Collection Coll
join dbo.v_FullCollectionMembership FCM on Coll.CollectionID = FCM.CollectionID
WHERE
Coll.CollectionID LIKE 'XXXXXX01'
OR Coll.CollectionID LIKE 'XXXXXX02'
GROUP BY
Coll.Name,
Coll.Comment,
Coll.CollectionID
ORDER BY
Coll.Name
Вы пробовали просто использовать поле MemberCount из v_Collection вместо COUNT (*)? Таким образом, вам не понадобится предложение «Группировать по», и это должно упростить отладку.
Взгляните на ссылку ниже, чтобы загрузить полный список представлений SQL, которые помогут в построении запросов позже.
https://gallery.technet.microsoft.com/SCCM-Configmgr-2012-R2-SQL-5fefdd3b
Ура
Джо