Вы хотите использовать предложение WITH ROLLUP в вашем операторе SELECT. В зависимости от того, какой тип SQL-сервера вы используете, существует несколько различных синтаксисов.
MS SQL Server 2000/2005 будет выглядеть так:
SELECT 'BEN' + CardCode, SUM(PayAmount)
FROM BENSALEM.dbo.PWZ3
INNER JOIN BENSALEM.dbo.OPWZ T5 ON T5.IdNumber = IdEntry
WHERE T5.PmntDate = '4/1/2011' AND T5.Canceled = 'N' AND Checked = 'Y'
GROUP BY CardCode WITH ROLLUP
Это вернет отдельные записи плюс дополнительную запись, где первое поле NULL, а второе поле SUM (). Обратите внимание, что вы можете сделать это с большим количеством уровней группировки, и это будет включать промежуточные итоги, а также соответствующие поля, равные NULL.
SQL Server 2008 имеет более ANSI-совместимый синтаксис, который делает то же самое:
SELECT 'BEN' + CardCode, SUM(PayAmount)
FROM BENSALEM.dbo.PWZ3
INNER JOIN BENSALEM.dbo.OPWZ T5 ON T5.IdNumber = IdEntry
WHERE T5.PmntDate = '4/1/2011' AND T5.Canceled = 'N' AND Checked = 'Y'
GROUP BY ROLLUP(CardCode)
Насколько я помню, MySQL использует первую форму, а Oracle использует вторую форму.
EDIT:
Мой запрос на самом деле не дает желаемых результатов; ROLLUP () работает, беря существующую агрегатную функцию и рекурсивно выполняя ее для более широких и широких групп. Вам нужно иметь ряд строк без функции агрегирования и применять агрегат один раз.
Вы можете получить этот эффект, используя предложение COMPUTE BY, но они давно устарели, а результаты неопрятны, поэтому я бы их избегал. (Проверьте MSDN для деталей, если вы действительно хотите.)
Самый простой способ достичь своей цели - найти способ сделать каждую запись уникальной, например, включить поле первичного ключа, чтобы PayAmount и SUM (PayAmount) давали одинаковый результат, а затем выполнить сведение.
SELECT IdEntry, 'BEN' + CardCode, SUM(PayAmount)
FROM BENSALEM.dbo.PWZ3
INNER JOIN BENSALEM.dbo.OPWZ T5 ON T5.IdNumber = IdEntry
WHERE T5.PmntDate = '4/1/2011' AND T5.Canceled = 'N' AND Checked = 'Y'
GROUP BY ROLLUP(CardCode, IdEntry)
Это даст вам результат, который выглядит примерно так:
1 BEN1234 1000
2 BEN1234 2000
3 BEN1234 1000
NULL BEN1234 4000
4 BEN4567 1500
5 BEN4567 1500
6 BEN4567 1000
NULL BEN4567 4000
NULL NULL 8000
Дайте нам знать, если это сработает для вас.