Maybe something like this:
SELECT SUM(t1.maxAmout) FROM ( SELECT MAX(t.Amout) AS maxAmout, t.Category FROM yourTable AS t GROUP BY t.Category ) AS t1
You can also do it like this. If you are using SQL Server 2005 +:
SELECT pvt.[1], pvt.[2], pvt.[3], ( pvt.[1]+ pvt.[2]+ pvt.[3] ) AS Total FROM ( SELECT t.Category, t.Amout FROM yourTable AS t ) AS SourceTable PIVOT ( MAX(Amout) FOR Category IN([1],[2],[3]) ) AS pvt
EDIT
If you have 1000 categories. Then the optimal solution would be a dynamic rod. So like this:
Test Data
CREATE TABLE #T ( Category INT, Amout FLOAT ) INSERT INTO #T VALUES (1,4.6), (1,4.6), (1,4.6), (2,5), (3,4)
Unique column names
DECLARE @cols VARCHAR(MAX) DECLARE @colsTotal VARCHAR(MAX) ;WITH CTE AS ( SELECT ROW_NUMBER() OVER(PARTITION BY t.Category ORDER BY t.Amout) AS RowNbr, t.* FROM
Dynamic rod
DECLARE @query NVARCHAR(4000)= N'SELECT ' +@cols +', ( ' +@colsTotal +' ) AS Total FROM ( SELECT t.Category, t.Amout FROM #T AS t ) AS SourceTable PIVOT ( MAX(Amout) FOR Category IN(' +@cols +') ) AS pvt' EXECUTE(@query)
Arion
source share