次の方法で共有


SQL クエリ ステートメント参照

適用対象: System Center Configuration Manager 2007, System Center Configuration Manager 2007 R2, System Center Configuration Manager 2007 R3, System Center Configuration Manager 2007 SP1, System Center Configuration Manager 2007 SP2

Configuration Manager 2007 レポートの作成時に、便利な Microsoft SQL Server ステートメントを多数使用できます。ここでは、これらのステートメントについて簡単に説明します。ここでの説明を理解するには、SQL クエリ ステートメントに関する基礎知識を持ち、次のようなクエリを作成できる必要があります。

SELECT Name, Comment, CollectionID

FROM v_Collection

WHERE Name LIKE 'All Windows%'

ORDER BY Name

基本的なクエリの作成方法については、Microsoft SQL Server 2005 Books Online で「クエリの基礎」を検索してください。

集約関数

集約関数 (SUM、AVG、COUNT、COUNT(*)、MAX、MIN など) は、クエリの結果セットに集計値を生成します。COUNT(*) 以外の集約関数は、1 つの列で選択されたすべての値を処理して、単一の結果値を出します。集約関数は、ビューのすべての行、WHERE 句で指定されるビューのサブセット、またはビューの 1 つまたは複数の行グループに適用できます。集約関数を適用すると、行の各セットから単一の値が生成されます。

重要

集約結果に 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

SiteCode SiteName ReportingSiteCode カウント

ABC

ABC サイト

 

928

123

123 サイト

ABC

1010

日付時刻関数

日付時刻関数は、多くの組み込みレポートで使用されます。よく使用される関数には、GETDATE、DATEADD、DATEDIFF、および DATEPART があります。

GETDATE ()

GETDATE 関数は、datetime 値に対して SQL Server 内部形式で現在の日時を求めます。GETDATE は、NULL パラメータの () を取ります。

次の例の結果は、現在のシステム日時になります。

SELECT GETDATE()

(列名なし)

2005-05-29 10:10:03.001

DATEADD (datepart, number, date)

DATEADD 関数は、指定した日付に追加する間隔に基づいて、新しい datetime 値を返します。

datepart は、新しい値を返す日付部分 (年、月、日、時、分など) を指定するパラメータです。number は、datepart を増分する値です。date は、開始日です。

次の例の結果は、2005 年 3 月 29 日から 2 日後の日付になります。

SELECT DATEADD([day], 2, '2005-05-29 10:10:03.001')

(列名なし)

2005-05-31 10:10:03.001

DATEDIFF (datepart , startdate , enddate)

DATEDIFF 関数は、指定した 2 つの日付の間の日時の境界の長さを返します。

datepart は、新しい値 (年、月、日、時、分など) を返す日付の部分を指定するパラメータです。startdate は、開始日です。enddate は、終了日です。

次の例の結果は、最初の日付と 2 番目の日付の間の分単位の長さになります。

SELECT DATEDIFF (minute, '2005-05-29 10:10:03.001',

'2005-06-12 09:28:11.111')

(列名なし)

20118

DATEPART (datepart , date)

DATEPART 関数は、指定した日付の指定した 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

日付時刻関数を使用するクエリの例

次のクエリの結果は、1 日間のステータス メッセージの総数になります。このクエリでは、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 カウント 終了日

ABC

500

190

2005-05-29 10:10:03.001

ABC

501

130

2005-05-29 10:10:03.001

ABC

502

190

2005-05-29 10:10:03.001

ABC

1105

85

2005-05-29 10:10:03.001

ABC

1106

5

2005-05-29 10:10:03.001

結合

Configuration Manager で効果的なレポートを作成するには、異なるビューを結合して目的のデータを取得する方法を理解する必要があります。結合には、内部結合、外部結合、およびクロス結合の 3 種類あります。また、外部結合には、左外部結合、右外部結合、および全外部結合の 3 種類あります。自己結合は、これらのいずれかの結合を使用して、同じビューのレコードを結合します。

内部結合

内部結合では、結合されたフィールドの値が特定の指定条件に適合する場合にのみ、2 つのビューのレコードを組み合わせてクエリの結果に追加します。v_R_System ビューと v_GS_WORKSTATION_STATUS ビューの結合に ResourceID を使用した内部結合の結果は、すべてのシステムとその最後のハードウェア スキャンの日付の一覧になります。

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

Machine Name 最後のハードウェア スキャン

Client1

2005-05-29 10:10:03.001

Client3

2005-06-12 09:28:11.110

外部結合

外部結合は、結合したビュー間に一致する行があるかどうかにかかわらず、結合したビューからすべての行を返します。ON 句は、データをフィルタするのではなく、データを補足します。3 種類の外部結合 (左外部結合、右外部結合、および全外部結合) は、メイン データのソースを示します。外部結合は、ビューに NULL 値がある場合に特に便利です。

左外部結合

左外部結合を使用して 2 つのビューを組み合わせると、左側のビューにあるすべての行が結果に含まれます。次のクエリでは、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

Machine Name 最後のハードウェア スキャン

Client1

2005-05-29 10:10:03.001

Client2

[NULL]

Client3

2005-06-12 09:28:11.110

右外部結合

右外部結合の概念は、右側のビューにあるすべての行が結果に含まれること以外は、左外部結合と同じです。

全外部結合

全外部結合は、結合された両方のビューからすべての行を取得します。返される行は、結合条件が適合するすべてのペア行、および他のビューの NULL 行と連結された各ビューのペアではない行です。この種類の外部結合は通常は使用しません。

クロス結合

クロス結合は、2 つのビューの和ではなく積を返します。左側のビューの各行は、右側のビューの各行と一致します。これは、フィルタされていない、行のすべての可能な組み合わせのセットです。ただし、WHERE 句を追加すると、クロス結合は内部結合として機能し、目的の行が得られるまで、行のすべての可能な組み合わせをフィルタする条件を使用します。

自己結合

自己結合は、上記のいずれかの種類の結合を使用しますが、ビューがそれ自体に結合されています。データベース ダイアグラムでは、自己結合は再帰的関係と呼ばれます。

NOT IN キーワード節

キーワード節の NOT IN があるサブクエリは、特定の条件に適合しないデータのセットに関する情報を見つけるのに非常に便利です。次の例では、クエリは Notepad.exe がインストールされていないすべてのコンピュータの NetBIOS 名を返します。最初に、次のように、選択したファイルがインストールされているすべてのコンピュータを検出できるクエリを作成します。

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

参照:

タスク

クエリ デザイナを使用してレポート クエリを作成または変更する方法

リファレンス

[SQL ステートメントのレポート]ダイアログ ボックス

概念

レポートの SQL ステートメントの変更方法

その他の情報については、「Configuration Manager 2007 Information and Support」 (Configuration Manager 2007 の情報とサポート) を参照してください。
ドキュメント チームに連絡するには、次のアドレスに電子メールを送信してください。 SMSdocs@microsoft.com.