Transposing Rows in to colums in SQL Server 2005

前端 未结 2 2002
天涯浪人
天涯浪人 2020-12-22 06:28

I have an sql query \"Select * from tablename\" whose output is

col1   col2       
  A     1 
  B     2 
  C     3

I want to modify the ab

相关标签:
2条回答
  • 2020-12-22 06:59

    You will need to perform a PIVOT. There are two ways to do this with PIVOT, either a Static Pivot where you code the columns to transform or a Dynamic Pivot which determines the columns at execution.

    Static Pivot:

    SELECT *
    FROM
    (
        SELECT col1, col2
        FROM yourTable
    ) x
    PIVOT
    (
       min(col2)
       for col1 in ([A], [B], [C])
    )p
    

    See SQL Fiddle with Demo

    Dynamic Pivot:

    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)
    
    select @cols = STUFF((SELECT distinct ',' + QUOTENAME(col1) 
                        from t1
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    set @query = 'SELECT ' + @cols + ' from 
                 (
                    select col1, col2
                    from t1
                ) x
                pivot 
                (
                    min(col2)
                    for col1 in (' + @cols + ')
                ) p '
    
    execute(@query)
    

    See SQL Fiddle with Demo

    If you do not want to use the PIVOT function, then you can perform a similar type of query with CASE statements:

    select 
      SUM(CASE WHEN col1 = 'A' THEN col2 END) as A,
      SUM(CASE WHEN col1 = 'B' THEN col2 END) as B,
      SUM(CASE WHEN col1 = 'C' THEN col2 END) as C
    FROM t1
    

    See SQL Fiddle with Demo

    0 讨论(0)
  • 2020-12-22 06:59

    You want to use PIVOT or COALESCE in sql.Here is a nice examples how to converting rows to columns. Five methods converting rows to columns

    .

    0 讨论(0)
提交回复
热议问题