一連の制約が与えられた場合、クエリから 2 つのものを取得しようとしています。
- 最初の試合
- 総試合数
次の方法で最初の一致を取得できます。
SELECT TOP 1
ID,
ReportYear,
Name,
SignDate,
...
FROM Table
WHERE
...
ORDER BY ... //I can put in here which one I want to take
そして、使用すると一致数を取得できます
SELECT
MIN(ID),
MIN(ReportYear),
MIN(Name),
MIN(SignDate),
... ,
COUNT(*) as MatchCount
FROM Table
WHERE
...
GROUP BY
??? // I don't really want any grouping
すべての結果に対して、グループ化と集計関数の使用の両方を避けたいと思っています。この質問SQL Server Select COUNT without using aggregate function or group byは、答えが次のようになることを示唆しています
SELECT TOP 1
ID,
ReportYear,
Name,
SignDate,
... ,
@@ROWCOUNT as MatchCount
FROM Table
これは TOP 1 なしで機能しますが、そこにある場合、@@ROWCOUNT = 返される行数、つまり 1 になります。基本的に COUNT(*) (where 句の後に残っているもの) の出力をグループ化またはすべての列を集計する必要がありますか?
私がやりたくないのは、これらのそれぞれを 2 回繰り返すことです。最初の行に対して 1 回、次に @@ROWCOUNT に対してもう一度行います。GROUP BY を正しく使用する方法が見つかりません。条件に一致するアイテムの数が厳密に必要であり、GROUP BY を誤解していない限り、グループ化するとこの数が失われる列が必要だからです。