首页 > 解决方案 > 如何透视具有多个列值的 SQL Server 表?

问题描述

如何使用 SQLPIVOT函数获得预期结果。我尝试了以下查询来执行此操作,但我在NAME列中只获得了一条记录。

样本数据:

    SNO       TYPE     ENTRY            
    1         Name     Andy         
    1         Name     Kevin            
    1         Active   Yes                   
    1         Value    50           
    2         Name     Andy         
    2         Name     Julia            
    2         Active   No           
    2         Value    45

预期结果:

   SNO    NAME        ACTIVE    VALUE       
   1    Andy, Kevin    Yes       50          
   2    Andy, Julia    No        45 

我试过的查询:

            select SNO,Name,Active,Value 
            from 
                (
                select * from tbl1
                ) as PivotData

                Pivot 
                (
                max(ENTRY) for TYPE in([Name],[Active],[Value])
                ) as Pivoting

标签: sql-serverpivotpivot-table

解决方案


假设 ACTIVE 和 VALUE 没有多个值。我们只是从 PIVOT 中排除 NAME 并通过标准 XML STUFF 解决它

例子

Select SNO
      ,Name  = Stuff((Select Distinct ',' +Entry From @YourTable Where SNO=Pvt.SNO and [TYPE]='Name' For XML Path ('')),1,1,'')
      ,Active
      ,Value 
 From   YourTable A
 Pivot ( max(ENTRY) for TYPE in (Active,Value) ) Pvt

退货

SNO Name        Active  Value
1   Andy,Kevin  Yes     50
2   Andy,Julia  No      45

推荐阅读