Другой вариант, который не требует динамического SQL, но только CROSS ОТНОСИТЬСЯ или два
Просто для удовольствия, я добавить Мин, Макс и Сред только для иллюстрации ... Также добавлен PctOfTotal или Common-Size
Declare @YourTable table (ID int,CustName varchar(50),Sales_Jan int,Sales_Feb int,Sales_Mar int)
Insert into @YourTable values
(1,'John Smith',25,25,50),
(2,'Jane Doe' ,35,20,null)
Select A.*
,C.*
,PctOfTotal = Format(C.Total*1.0/Sum(C.Total) over(),'0.00%')
From @YourTable A
Cross Apply (Select XMLData=cast((Select A.* For XML RAW) as xml)) B
Cross Apply (
Select Total = Sum(Value)
,Min = Min(Value)
,Max = Max(Value)
,Avg = Avg(Value)
From (
Select Value = attr.value('.','int')
From B.XMLData.nodes('/row') as A(r)
Cross Apply A.r.nodes('./@*') AS B(attr)
Where attr.value('local-name(.)','varchar(100)') Like 'Sales_%'
--Or you can Exclude Specific Columns
--Where attr.value('local-name(.)','varchar(100)') not in ('ID','CustName')
) S
) C
R eturns
что вы имеете в виду 'просуммировать все значения возвращенного columns'? По внешнему виду имя, вероятно, является текстовым столбцом. Сумма чего? – GurV
Код вернет все столбцы в указанной таблице. Я хочу суммировать значение каждого столбца определенной строки –
, чтобы вы могли суммировать столбец значениями одной строки? Почему вы не можете просто написать имена столбцов - сколько столбцов у вас есть? – Hogan