0

私のアプリケーションは、一般的な形式でいくつかのクエリを実行します。

SELECT <aggregate-functions>
FROM <table-name>
WHERE <where-clause>
GROUP BY <group-by column list>

集約結果セットに寄与したレコードの数 (つまり、WHERE 句の条件に一致したレコードの数) を知りたいのですが、SELECT 句と GROUP- の両方の集約関数のために隠されています。 BY句。同じ WHERE 句を使用して単純な SELECT COUNT(*) を実行してその数を取得できることはわかっていますが、可能であれば 2 番目のクエリは避けたいと考えています。別のクエリなしでその値を生成する SQL Server 機能/機能/などはありますか?

4

2 に答える 2

1

簡単な解決策は、サブセレクトです。

Select ...
    , ( Select Count(*) 
        From Table 
        Where ...) As TotalCount
From Table
Where ...
Group By ...

SQL Server 2005 以降を使用している場合は、次のようなことができます。

With RankedItems As
    (
    Select Col1
        , Row_Number() Over ( Order By Col1 Asc, Col2 Asc... ) As Num
        , Row_Number() Over ( Order By Col1 Desc, Col2 Desc ) As RevNum
    From Table
    Where ...
    )
Select Col1, Min(Num + RevNum - 1) As TotalCount
From RankedItems
Group By Col1
于 2010-05-26T18:50:35.647 に答える
1

集計に関連する任意の値のカウントを追加することも、実行することもできます

SELECT  x.name, 
        y.name, 
        z.name, 
        AVG(x.tacos) AS average_tacos, 
        SUM(1) AS aggregated_row_count
FROM ....
WHERE ...
GROUP BY x.name, y.name, z.name
于 2010-05-26T18:52:29.857 に答える