Recordset: recupero di somme e altri risultati aggregati (ODBC)
Nota
La Creazione guidata consumer ODBC MFC non è disponibile in Visual Studio 2019 e versioni successive. È comunque possibile creare manualmente un consumer.
Le informazioni contenute in questo argomento sono valide per le classi ODBC MFC.
In questo argomento viene illustrato come ottenere risultati aggregati con le parole chiave SQL seguenti:
SUM Calcola il totale dei valori in una colonna con tipo di dati numerico.
MIN Estrae il valore più piccolo in una colonna con tipo di dati numerico.
MAX Estrae il valore più grande in una colonna con tipo di dati numerico.
AVG Calcola la media di tutti i valori in una colonna con tipo di dati numerico.
COUNT Esegue il conteggio del numero di record in una colonna con qualsiasi tipo di dati.
Usare queste funzioni SQL per ottenere informazioni statistiche sui record in un'origine dati, anziché per estrarre i record dall'origine dati. Il recordset che viene creato in genere è costituito da un singolo record (se tutte le colonne sono aggregazioni) che contiene un valore. (Se è stato usato un record, potrebbe essere presente più di un recordClausola GROUP BY . Questo valore è il risultato del calcolo o dell'estrazione eseguita dalla funzione SQL.
Suggerimento
Per aggiungere una clausola SQL GROUP BY (ed eventualmente una clausola HAVING) all'istruzione SQL, aggiungerla alla fine di m_strFilter
. Ad esempio:
m_strFilter = "sales > 10 GROUP BY SALESPERSON_ID";
È possibile limitare il numero di record usati per ottenere risultati aggregati filtrando e ordinando le colonne.
Attenzione
Alcuni operatori di aggregazione restituiscono un tipo di dati diverso da quello delle colonne su cui eseguono l'aggregazione.
SUM e AVG potrebbero restituire il tipo di dati più grande successivo, ad esempio la chiamata con
int
restituisce LONG odouble
.COUNT in genere restituisce LONG indipendentemente dal tipo di colonna di destinazione.
MAX e MIN restituiscono lo stesso tipo di dati delle colonne su cui eseguono il calcolo.
Ad esempio, la procedura guidata Aggiungi classe crea
long
m_lSales
per contenere una colonna Sales, ma è necessario sostituirla con undouble m_dblSumSales
membro dati per contenere il risultato aggregato. Vedi l'esempio seguente.
Per ottenere un risultato aggregato per un recordset
Creare un recordset, come descritto in Aggiunta di un consumer ODBC MFC, contenente le colonne da cui si vogliono ottenere i risultati aggregati.
Modificare la funzione DoFieldExchange per il recordset. Sostituire la stringa che rappresenta il nome della colonna (il secondo argomento delle chiamate di funzione RFX) con una stringa che rappresenta la funzione di aggregazione nella colonna. Ad esempio, sostituire:
RFX_Long(pFX, "Sales", m_lSales);
con:
RFX_Double(pFX, "Sum(Sales)", m_dblSumSales)
Aprire il recordset. Il risultato dell'operazione di aggregazione viene lasciato in
m_dblSumSales
.
Nota
La procedura guidata assegna i nomi dei membri dati senza i prefissi della notazione ungherese. Ad esempio, la procedura guidata produrrebbe m_Sales
per una colonna Sales, anziché il nome m_lSales
usato in precedenza a scopo illustrativo.
Se si usa una classe CRecordView per visualizzare i dati, è necessario modificare la chiamata di funzione DDX per visualizzare il valore del nuovo membro dati. In questo caso, deve essere modificata da:
DDX_FieldText(pDX, IDC_SUMSALES, m_pSet->m_lSales, m_pSet);
Con:
DDX_FieldText(pDX, IDC_SUMSALES, m_pSet->m_dblSumSales, m_pSet);