レコードセット: 集計値の計算 (ODBC)
Note
MFC ODBC コンシューマー ウィザードは、Visual Studio 2019 以降では利用できません。 引き続き、コンシューマーを手動で作成することはできます。
このトピックの内容は、MFC ODBC クラスに該当します。
このトピックでは、次の SQL キーワードを使用して集計の結果を取得する方法について説明します。
SUM では、数値データ型の列において値の合計を計算します。
MIN では、数値データ型の列において最小値を抽出します。
MAX では、数値データ型の列において最大値を抽出します。
AVG では、数値データ型の列において、すべての値の平均値を計算します。
COUNT では、任意のデータ型の列においてレコードの数をカウントします。
これらの SQL 関数は、データ ソースからレコードを抽出するためではなく、データ ソース内のレコードに関する統計情報を取得するために使用します。 作成されるレコードセットは通常、1 つの値を含む 1 つのレコードで構成されます (すべての列が集計列である場合)。 (GROUP BY 句を使用した場合は、複数のレコードがある可能性があります。)この値は SQL 関数によって実行された計算または抽出の結果です。
ヒント
SQL GROUP BY 句 (および場合によって HAVING 句) を SQL ステートメントに追加するには、m_strFilter
の末尾に追加します。 次に例を示します。
m_strFilter = "sales > 10 GROUP BY SALESPERSON_ID";
列をフィルターおよび並べ替えすることによって、集計結果を得るために使用するレコードの数を制限できます。
注意事項
一部の集計演算子では、集計される列とは異なるデータ型が返されます。
SUM および AVG では、次に大きいデータ型が返される場合があります (たとえば、
int
を使用した呼び出しで LONG やdouble
が返されます)。COUNT では通常、ターゲット列の型に関係なく LONG が返されます。
MAX および MIN では、計算する列と同じデータ型が返されます。
たとえば、クラスの追加ウィザードでは、Sales 列に対応する
long
m_lSales
が作成されますが、集計結果に対応するには、これをdouble m_dblSumSales
データ メンバーに置き換える必要があります。 次の例を参照してください。
レコードセットの集計結果を取得するには
「MFC ODBC コンシューマーの追加」の説明に従って、集計結果を取得する基になる列を含むレコードセットを作成します。
レコードセットの DoFieldExchange 関数を変更します。 列名を表す文字列 (RFX 関数呼び出しの 2 番目の引数) を、列の集計関数を表す文字列に置き換えます。 たとえば、次を置き換えるとします。
RFX_Long(pFX, "Sales", m_lSales);
次の内容に置き換えます。
RFX_Double(pFX, "Sum(Sales)", m_dblSumSales)
レコードセットを開きます。 集計操作の結果は
m_dblSumSales
に残されています。
Note
ウィザードでは、実際にはハンガリアン記法の接頭辞を付けずにデータ メンバー名が割り当てられます。 たとえば、ウィザードによって Sales 列に対して生成されるのは、先ほどの説明に使用した m_lSales
名ではなく、m_Sales
です。
データを表示するために CRecordView クラスを使用している場合は、新しいデータ メンバー値を表示するように DDX 関数呼び出しを変更する必要があります。この場合、以下を変更します。
DDX_FieldText(pDX, IDC_SUMSALES, m_pSet->m_lSales, m_pSet);
移動先:
DDX_FieldText(pDX, IDC_SUMSALES, m_pSet->m_dblSumSales, m_pSet);