それを行うには2つの方法があります。1つの方法は、以下のように、すべての非集計列をgroupbyリストに含めることです。
SELECT
c.firstname,
c.lastname,
c.CustomerId,
count(si.CustomerID) as 'No Of Orders'
FROM
customer c
LEFT OUTER JOIN
SalesInvoice si ON si.CustomerID = c.CustomerID
GROUP BY
c.CustomerID,
c.firstname,
c.lastname
これを行う別の方法は、選択リストで集計関数(最小または最大で実行する必要があります)を使用することです。
SELECT
MIN(c.firstname) as firstname,
MIN(c.lastname) as lastname,
c.CustomerId,
count(si.CustomerID) as 'No Of Orders'
FROM
customer c
LEFT OUTER JOIN
SalesInvoice si ON si.CustomerID = c.CustomerID
GROUP BY
c.CustomerID
最初のクエリの方がパフォーマンスが良いと思います。全体的なパフォーマンスを向上させるには、インクルードインデックスまたはカバーインデックスを作成する必要があります。
次のリンクを参照して、含まれているインデックスに関するアイデアを得ることができます。
- インデックスを作成するときにINCLUDE句を使用するのはなぜですか?
- http://msdn.microsoft.com/en-IN/library/ms190806.aspx