SQL Server PIVOT perhaps?

前端 未结 3 1499
长情又很酷
长情又很酷 2020-11-29 11:38

SELECT Name1, Name2, Value FROM mytable gives me the following result set:

Name1 Name2 Value
A     P1     1
A     P2     1
A     P3     2
B     P1            


        
3条回答
  •  死守一世寂寞
    2020-11-29 12:24

    I don't have SQL Server running here at work so this may not by completely syntatically correct but one approach would be cross tabulation

    SELECT name2
         , SUM(CASE WHEN name1 = 'A' THEN value END) AS A
         , SUM(CASE WHEN name1 = 'B' THEN value END) AS B
    FROM table
    GROUP BY name2
    

    For variable number of columns you could use dynamic SQL:

    DECLARE @sql varchar(max)
    SELECT @sql = COALESCE(@sql+',','') + 'SUM(CASE WHEN nane1 = '''+name1+''' THEN value END) AS ['+name1']' FROM table
    
    SET @sql = 'SELECT name2, '+@sql+' FROM table GROUP BY name2'
    
    EXEC(@sql)
    

提交回复
热议问题