Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При создании отчетов Configuration Manager можно использовать множество полезных инструкций Microsoft SQL Server, которые кратко описаны в этом разделе. Чтобы следовать этому обсуждению, вы должны иметь базовый уровень знаний инструкции SQL query и возможность писать запросы, такие как:
SELECT Name, Comment, CollectionID
FROM v_Collection
WHERE Name LIKE 'All Windows%'
ORDER BY Name
Сведения о написании базовых запросов см. в документации по SQL Server.
Агрегатные функции
Агрегатные функции (такие как SUM, AVG, COUNT, COUNT(*), MAX и MIN) создают сводные значения в результирующих наборах запросов. Агрегатная функция (за исключением COUNT(*)) обрабатывает все выбранные значения в одном столбце для получения одного результирующих значений. Агрегатные функции могут применяться ко всем строкам в представлении, к подмножествию представления, указанному в предложении WHERE, или к одной или нескольким группам строк в представлении. При применении агрегатной функции из каждого набора строк создается одно значение.
Важно!
Имейте в виду, что значения NULL не включаются в статистические результаты. Например, если у вас есть 100 записей и 8 из них имеют значение столбца NULL для подсчитываемого свойства, счетчик вернет только 92 результата.
Пример использования агрегатной функции COUNT(*) показан в следующем запросе (из счетчика клиентов для каждого предопределенного отчета сайта) и в примере результированного набора.
SELECT v_Site.SiteCode, v_Site.SiteName, v_Site.ReportingSiteCode,
Count(SMS_Installed_Sites0) AS 'Count'
FROM v_Site, v_RA_System_SMSInstalledSites InsSite
WHERE v_Site.SiteCode = InsSite.SMS_Installed_Sites0
GROUP BY SiteCode, SiteName, ReportingSiteCode
ORDER BY SiteCode
Код сайта | Имя_сайта | ReportingSiteCode | Count |
---|---|---|---|
АЗБУКА | Сайт ABC | 928 | |
123 | Сайт 123 | АЗБУКА | 1010 |
Функции даты и времени
Во многих встроенных отчетах используются функции даты и времени. Наиболее распространенными функциями являются GETDATE, DATEADD, DATEDIFF и DATEPART.
GETDATE ()
Функция GETDATE создает текущую дату и время в SQL Server внутреннем формате для значений datetime. GETDATE принимает параметр NULL ().
В следующем примере показано, как показано текущее системное время и дата:
SELECT GETDATE()
(без имени столбца) |
---|
2005-05-29 10:10:03.001 |
DATEADD (datepart, number, date)
Функция DATEADD возвращает новое значение datetime на основе добавления интервала к указанной дате.
Datepart — это параметр, указывающий, в какой части даты возвращается новое значение (например, год, месяц, день, час, минута и т. д.), number — значение, используемое для приращения datepart, а date — начальная дата.
Следующий пример приводит к дате, которая составляет два дня с 29 мая 2005 г.:
SELECT DATEADD([day], 2, '2005-05-29 10:10:03.001')
(без имени столбца) |
---|
2005-05-31 10:10:03.001 |
DATEDIFF (datepart, startdate, enddate)
Функция DATEDIFF возвращает число границ даты и времени, пересекаемых между двумя указанными датами.
Datepart — это параметр, указывающий, в какой части даты возвращается новое значение (например, год, месяц, день, час, минута и т. д.), startdate — начальная дата, enddate — конечная дата.
В следующем примере показано количество минут между первой и второй датами:
SELECT DATEDIFF (minute, '2005-05-29 10:10:03.001',
'2005-06-12 09:28:11.111')
(без имени столбца) |
---|
20118 |
DATEPART (datepart , date)
Функция DATEPART возвращает целое число, представляющее указанную часть даты указанной даты.
Datepart — это параметр, указывающий, в какой части возвращаемой даты, а date — указанная дата.
В следующем примере показано, как месяц в указанной дате:
SELECT DATEPART (month, '2005-05-29 10:10:03.001')
(без имени столбца) |
---|
5 |
Объединение функций даты и времени
Обычно в отчетах Configuration Manager используется сочетание функций даты и времени.
В следующем примере приведены текущие дата и время (2005-05-29 10:10:03.001 в этом примере) минус 100 дней:
SELECT DATEADD([day], - 100, GETDATE())
(без имени столбца) |
---|
2005-02-18 10:10:03.001 |
Пример запроса с использованием функций даты и времени
Следующий запрос приводит к общему количеству сообщений о состоянии за один день. В этом запросе используются функции COUNT, GETDATE и DATEADD, а также логический оператор BETWEEN и предложения GROUP BY и ORDER BY.
SELECT SiteCode, MessageID, COUNT(MessageID) AS [count],
GETDATE() AS [End Date]
FROM vStatusMessages
WHERE ([Time] BETWEEN DATEADD([day], -1, GETDATE()) AND GETDATE())
AND (MessageID BETWEEN '0' AND '10000')
GROUP BY SiteCode, MessageID
ORDER BY SiteCode, MessageID
Код сайта | MessageID | Count | Дата окончания |
---|---|---|---|
АЗБУКА | 500 | 190 | 2005-05-29 10:10:03.001 |
АЗБУКА | 501 | 130 | 2005-05-29 10:10:03.001 |
АЗБУКА | 502 | 190 | 2005-05-29 10:10:03.001 |
АЗБУКА | 1105 | 85 | 2005-05-29 10:10:03.001 |
АЗБУКА | 1106 | 5 | 2005-05-29 10:10:03.001 |
СОЕДИНЕНИЯ
Чтобы создать эффективные отчеты в Configuration Manager, необходимо понять, как объединять различные представления для получения ожидаемых данных. Существует три типа соединений: внутреннее, внешнее и перекрестное. Кроме того, существует три типа внешних соединений: левое, правое и полное. Само соединение использует любое из указанных выше соединений, но объединяет записи из того же представления.
Внутренние соединения
Во внутреннем соединении записи из двух представлений объединяются и добавляются в результаты запроса только в том случае, если значения объединенных полей соответствуют определенным условиям. Если вы используете внутреннее соединение с помощью ResourceID для присоединения v_R_System и v_GS_WORKSTATION_STATUS представлений, результатом будет список всех систем и дата последней проверки оборудования.
SELECT v_R_System.Netbios_Name0 AS MachineName,
v_GS_WORKSTATION_STATUS.LastHWScan AS [Last HW Scan]
FROM v_R_System INNER JOIN v_GS_WORKSTATION_STATUS
ON v_R_System.ResourceID = v_GS_WORKSTATION_STATUS.ResourceID
Имя компьютера | Последнее сканирование HW |
---|---|
Client1 | 2005-05-29 10:10:03.001 |
Клиент3 | 2005-06-12 09:28:11.110 |
Внешние соединения
Внешнее соединение возвращает все строки из объединенных представлений независимо от того, есть ли между ними соответствующая строка. Предложение ON дополняет данные, а не фильтрует их. Три типа внешних соединений (левое, правое и полное) указывают на источник данных main. Внешние соединения могут быть особенно полезны при наличии значений NULL в представлении.
Слева внешние соединения
При использовании левого внешнего соединения для объединения двух представлений все строки в левом представлении включаются в результаты. В следующем запросе представления v_R_System и v_GS_WORKSTATION_STATUS объединяются с помощью левого внешнего соединения. Представление v_R_System является первым представлением, перечисленным в запросе, что делает его левым. Результат будет включать список всех систем и дату последней проверки оборудования. В отличие от внутреннего соединения, системы, которые не были проверены на наличие оборудования, по-прежнему будут перечислены со значением NULL (как показано в результирующем наборе).
SELECT v_R_System.Netbios_Name0 AS MachineName,
v_GS_WORKSTATION_STATUS.LastHWScan AS [Last HW Scan]
FROM v_R_System LEFT OUTER JOIN v_GS_WORKSTATION_STATUS
ON v_R_System.ResourceID = v_GS_WORKSTATION_STATUS.ResourceID
Имя компьютера | Последнее сканирование HW |
---|---|
Client1 | 2005-05-29 10:10:03.001 |
Client2 | NULL |
Клиент3 | 2005-06-12 09:28:11.110 |
Правые внешние соединения
Правое внешнее соединение по сути совпадает с левым внешним соединением, за исключением того, что в результаты включаются все строки из правого представления.
Полное внешнее соединение
Полное внешнее соединение извлекает все строки из обоих объединенных представлений. Он возвращает все парные строки, в которых условие соединения равно true, а также неспаренные строки из каждого представления, объединенные со строками NULL из другого представления. Обычно вы не хотите использовать этот тип внешнего соединения.
Перекрестные соединения
Перекрестное соединение возвращает произведение двух представлений, а не сумму. Каждая строка в левом представлении сопоставляется с каждой строкой в правом представлении. Это набор всех возможных сочетаний строк без фильтрации. Однако при добавлении предложения WHERE функция перекрестного соединения в качестве внутреннего соединения использует условие для фильтрации всех возможных сочетаний строк до нужных.
Самостоятельное присоединение
При самостоятельном соединении используется любой из указанных выше типов соединений, но это представление, присоединенное к самому себе. На схемах баз данных самосоединяющееся называется рефлексивной связью.
ФРАЗА NOT IN ключевое слово
Вложенные запросы с ключевое слово фразой NOT IN очень полезны для поиска сведений о наборе данных, которые не соответствуют определенным критериям. В следующем примере запрос возвращает NetBIOS-имя всех компьютеров, на которых не установлены Notepad.exe. Сначала необходимо создать запрос, который может обнаружить все компьютеры, на которых установлен выбранный файл, следующим образом:
SELECT DISTINCT v_R_System.Netbios_Name0
FROM v_R_System INNER JOIN v_GS_SoftwareFile
ON (v_GS_SoftwareFile.ResourceID = v_R_System.ResourceId)
WHERE v_GS_SoftwareFile.FileName = 'Notepad.exe'
После подтверждения того, что в первом запросе отображаются все компьютеры, на которых установлены Notepad.exe, следующая инструкция вложенного запроса будет использовать фразу NOT IN ключевое слово для поиска всех имен компьютеров, на которых не установлен Notepad.exe файл:
SELECT DISTINCT Netbios_Name0
FROM v_R_System
WHERE Netbios_Name0 NOT IN
(SELECT DISTINCT v_R_System.Netbios_Name0
FROM v_R_System INNER JOIN v_GS_SoftwareFile
ON (v_GS_SoftwareFile.ResourceID = v_R_System.ResourceId)
WHERE v_GS_SoftwareFile.FileName = 'Notepad.exe')
ORDER by Netbios_Name0