Поскольку вы счастливы, что у вас нет сортировки, это быстрый ответ, прежде чем я вернусь к работе.На сервере Sql есть фантастическая функция отчетности - С Rollup.Он автоматически добавляет итоги и итоги в запрос;на основе используемых вами группировок.
В качестве очень быстрого примера с использованием определения таблицы @ astander
DECLARE @Sales TABLE(
CUS_ID INT,
PRODUCT VARCHAR(20),
AMOUNT FLOAT
)
INSERT INTO @Sales SELECT 12,'A', 2.50
INSERT INTO @Sales SELECT 12,'B', 5.80
INSERT INTO @Sales SELECT 24,'A', 10.00
INSERT INTO @Sales SELECT 24,'B', 30.00
Select Cus_ID, Product, SUM(Amount)
From @Sales
group by cus_id, product with rollup
Возвращается
Cus_ID Product
----------- -------------------- ----------------------
12 A 2.5
12 B 5.8
12 NULL 8.3
24 A 10
24 B 30
24 NULL 40
NULL NULL 48.3
Чтобы было легче писатьВ ваших отчетных данных извлекаются и идентифицируются строки промежуточных итогов, есть функция - группировка - которую вы можете запрашивать по группам по элементам.В приведенном ниже примере он идентифицирует промежуточные итоги и итоговые строки.
DECLARE @Sales TABLE(
CUS_ID INT,
PRODUCT VARCHAR(20),
AMOUNT FLOAT
)
INSERT INTO @Sales SELECT 12,'A', 2.50
INSERT INTO @Sales SELECT 12,'B', 5.80
INSERT INTO @Sales SELECT 24,'A', 10.00
INSERT INTO @Sales SELECT 24,'B', 30.00
select
case
when GROUPING(product) = 1 and GROUPING(cus_id) = 0 then 'Sub Total - Customer -' + cast(Cus_ID as varchar(10))
when GROUPING(product) = 1 and GROUPING(cus_id) = 1 then 'Total'
else cast(Cus_ID as varchar(10)) end as Cus_ID,
PRODUCT,
sum(Amount) as Total_Amount
From @sales
group by cus_id, product with rollup
Возвращение
Cus_ID PRODUCT Total_Amount
-------------------------------- -------------------- ----------------------
12 A 2.5
12 B 5.8
Sub Total - Customer -12 NULL 8.3
24 A 10
24 B 30
Sub Total - Customer -24 NULL 40
Total NULL 48.3
Небольшой твик заставит его выполнить сортировку, после которой вы.