SQL Server PIVOT perhaps?

前端 未结 3 1502
长情又很酷
长情又很酷 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:18

    Since you are using SQL Server 2005, here is the code:

    DECLARE @cols VARCHAR(1000)
    DECLARE @sqlquery VARCHAR(2000)
    
    SELECT  @cols = STUFF(( SELECT distinct  ',' + QuoteName([Name1])
                            FROM myTable FOR XML PATH('') ), 1, 1, '') 
    
    
    SET @sqlquery = 'SELECT * FROM
          (SELECT Name2, Name1, Value
           FROM myTable ) base
           PIVOT (Sum(Value) FOR [Name1]
           IN (' + @cols + ')) AS finalpivot'
    
    EXECUTE ( @sqlquery )
    

    This will work no matter how many different status you have. It dynamically assembles a query with PIVOT. The only way you can do PIVOT with dynamic columns is by assembling the the query dynamically, which can be done in SQL Server.

    Other examples:

    • Pivot data in T-SQL
    • How do I build a summary by joining to a single table with SQL Server?
    • https://stackoverflow.com/q/8248059/570191

提交回复
热议问题