次の方法で共有


レコードセット: 集計値の計算 (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 を使用した呼び出しで LONGdouble が返されます)。

  • COUNT では通常、ターゲット列の型に関係なく LONG が返されます。

  • MAX および MIN では、計算する列と同じデータ型が返されます。

    たとえば、クラスの追加ウィザードでは、Sales 列に対応する long m_lSales が作成されますが、集計結果に対応するには、これを double m_dblSumSales データ メンバーに置き換える必要があります。 次の例を参照してください。

レコードセットの集計結果を取得するには

  1. MFC ODBC コンシューマーの追加」の説明に従って、集計結果を取得する基になる列を含むレコードセットを作成します。

  2. レコードセットの DoFieldExchange 関数を変更します。 列名を表す文字列 (RFX 関数呼び出しの 2 番目の引数) を、列の集計関数を表す文字列に置き換えます。 たとえば、次を置き換えるとします。

    RFX_Long(pFX, "Sales", m_lSales);
    

    次の内容に置き換えます。

    RFX_Double(pFX, "Sum(Sales)", m_dblSumSales)
    
  3. レコードセットを開きます。 集計操作の結果は 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);

関連項目

レコードセット (ODBC)
レコードセット: レコード選択のしくみ (ODBC)