Member 14594285 Ответов: 2

Функция sum на SQL для базы данных


Я хочу суммировать значения таблицы моей базы данных, и я написал:

strQuery = _T( "SELECT SUM (pezzi) FROM PRODOTTI " );


но он говорит, что в моей базе данных нет database.sum...Я не undestand, потому что он должен распознавать functiobn sum

Что я уже пробовал:

Я пробовал искать в интернете, но они используют функцию sum без проблем

2 Ответов

Рейтинг:
1

OriginalGriff

Проверьте строку подключения и убедитесь, что вы подключаетесь к определенной БД, а не просто подключаетесь к серверу.

Если вы уверены, что это правильно, то используйте отладчик, чтобы точно проверить, что вы делаете с этой строкой запроса и что именно вы передаете в SQL. (У нас нет доступа к остальной части вашего кода, поэтому мы не можем проверить, что строка не будет изменена с этого момента).

SELECT SUM(... отлично работает на всех моих системах здесь, так что я бы предположил, что это то, что вы делаете со строкой позже.


Member 14594285

теперь запрос работает, но вопрос, когда я пишу код для записи своих результатов в список, я пишу:
набор записей.GetFieldValue(_T("data_scanner"), dtScanner);
набор записей.GetFieldValue(_T("somma"), lPezzi);
pLst->SetItemText(nProdotti, 1, strDataScanner);

но там нет группы по данным..есть только список дат

OriginalGriff

Отдельная проблема, отдельный вопрос - разместите его как новый, чтобы он был открыт для всех здесь.
И включите полный код для соответствующего фрагмента, чтобы мы все точно знали, с чем вы работаете.

Member 14594285

ладно

Рейтинг:
0

phil.o

Вы должны использовать GROUP BY предложение при использовании любой агрегационной функции:

strQuery = _T( "SELECT SUM (pezzi) FROM PRODOTTI GROUP BY id " );


Member 14594285

Я написал::
strQuery = _T( "SELECT SUM (pel_pezzi) FROM PRODOTTI GROUP BY PRODOTTI.data_scanner");
if (CFG->m_bDataScanner)
{
strQuery.Добавить(bWhere ? ТО _T("И ") : ІТ("ГДЕ "));
strQuery.AppendFormat(_T("PRODOTTI.pel_data_scanner между '%04ld-%02ld-%02ld %02ld:%02ld:%02ld' и '%04ld-%02ld-%02ld %02ld:%02ld:%02ld'"),
ГПФ-&ГТ;m_dtScannerIni.GetYear(), CFG->m_dtScannerIni.GetMonth(), CFG->m_dtScannerIni.GetDay(), CFG->m_dtScannerIni.GetHour(), CFG->m_dtScannerIni.GetMinute(), CFG->m_dtScannerIni.GetSecond(),
ГПФ-&ГТ;m_dtScannerFin.GetYear(), CFG->m_dtScannerFin.GetMonth(), CFG->m_dtScannerFin.GetDay(), CFG->m_dtScannerFin.GetHour(), CFG->m_dtScannerFin.GetMinute(), CFG->m_dtScannerFin.GetSecond());
bWhere = TRUE;
}

Member 14594285

но это не работает, есть ошибка в моем синтаксе

phil.o

Что ж, было бы интересно посмотреть на окончательный запрос, который будет получен. Единственное, что я могу сказать прямо сейчас, это то, что после этого, кажется, не хватает пробела data_scanner Это распространенная ошибка при построении sql-запросов путем конкатенации.

Member 14594285

Я написал это только для того, чтобы попробовать:
strQuery = _T( "SELECT SUM (pel_pezzi), data_scanner FROM PRODOTTI GROUP BY PRODOTTI.data_scanner ");
но это не вотк, это говорит о том, что в моей базе данных есть столбец SUM, Я не понимаю

Member 14594285

теперь я удалил пробел после суммы, и есть еще одна ошибка: "impossibile trovare l'oggetto desiderato"

Richard Deeming

- Нет, не знаешь. Если вы не укажите GROUP BY предложение, агрегат применяется ко всей таблице.

Единственное время, которое вы должны использовать GROUP BY это если у вас есть столбцы, в которых не указан агрегат.