次の点を考慮してください。
IF OBJECT_ID ('tempdb..#Customer') IS NOT NULL
DROP TABLE #Customer;
CREATE TABLE #Customer
(
CustomerKey INT IDENTITY (1, 1) NOT NULL
,CustomerNum INT NOT NULL
,CustomerName VARCHAR (25) NOT NULL
,Planet VARCHAR (25) NOT NULL
)
GO
INSERT INTO #Customer (CustomerNum, CustomerName, Planet)
VALUES (1, 'Anakin Skywalker', 'Tatooine')
, (2, 'Yoda', 'Coruscant')
, (3, 'Obi-Wan Kenobi', 'Coruscant')
, (4, 'Luke Skywalker', 'Tatooine')
, (4, 'Luke Skywalker', 'Tatooine')
, (4, 'Luke Skywalker', 'Bespin')
, (4, 'Luke Skywalker', 'Bespin')
, (4, 'Luke Skywalker', 'Endor')
, (4, 'Luke Skywalker', 'Tatooine')
, (4, 'Luke Skywalker', 'Kashyyyk');
合計 10 件のレコードがあることに注意してください。次の 2 つのクエリのいずれかを使用して、CustomerName と PLanet の個別の組み合わせのリストを取得できることを知っています。
SELECT DISTINCT CustomerName, Planet FROM #Customer;
SELECT CustomerName, Planet FROM #Customer
GROUP BY CustomerName, Planet;
ただし、私が望むのは、値自体ではなく、それらの値の数だけを取得する簡単な方法です。すばやく入力できるだけでなく、パフォーマンスも高い方法が必要です。CTE、一時テーブル、テーブル変数、またはサブクエリに値をロードして、レコードをカウントできることはわかっています。これを達成するためのより良い方法はありますか?