Если вас интересует вспомогательная функция.
Эта табличная функция возвращает Count,Sum,Min,Max,Avg and STDev
практически для любой строки.
Все, что вам нужно сделать, это добавить CROSS APPLY
после вашегоPIVOT
.
Я должен добавить, что вы должны " ИСКЛЮЧИТЬ " любой числовой столбец, который вы НЕ хотите в агрегатах
Пример
Declare @T1 Table ([Branch] varchar(50),[Item] varchar(50),[Sales] int)
Insert Into @T1 Values
('23','Apples',25)
,('23','Coffee',56)
,('23','Bread',22)
,('14','Apples',56)
,('14','Coffee',65)
,('14','Bread',null)
Select Pvt.*
,Ttl.*
From @T1
Pivot ( max(Sales) for Item in ([Apples],[Coffee],[Bread]) ) Pvt
Cross Apply [dbo].[tvf-Stat-Row-Agg]('Branch,OtherColumsToExclude',(Select Pvt.* for XML Raw)) Ttl
Возвращает
/---- From Pivot ----\ /---- From CROSS APPLY ----\
Branch Apples Coffee Bread RetCnt RetSum RetMin RetMax RetAvg RetStd
14 56 65 NULL 2 121 56 65 60.5 6.3639
23 25 56 22 3 103 22 56 34.33 18.8237
TVF, если интересно
CREATE FUNCTION [dbo].[tvf-Stat-Row-Agg](@Exclude varchar(500),@XML xml)
Returns Table
As
Return (
Select RetCnt = count(value)
,RetSum = Sum(Value)
,RetMin = Min(Value)
,RetMax = Max(Value)
,RetAvg = Avg(Value)
,RetStd = Stdev(Value)
From (
Select Item = xAttr.value('local-name(.)','varchar(100)')
,Value = try_convert(float,xAttr.value('.','varchar(max)'))
From @XML.nodes('//@*') x(xAttr)
) S
Where charindex(','+S.Item+',',','+@Exclude+',')=0
);