使用UNPIVOT的动态SQL SELECT列名和相关数据

时间:2012-11-14 17:26:12

标签: select sql-server-2008-r2 unpivot columnname

我有一个名为PERSONNELSERVICELEVELS的表格,其中包含IDName等常规信息,但还有许多列标识为ServiceLevel%,如下所示:

Person_ID  Last_Name  First_Name  ServiceLevel1  ServiceLevel2  ServiceLevel3  etc.
---------  ---------  ----------  -------------  -------------  -------------
222        Doe        John        4              5              NULL  
555        Doe        Jane        2              6              9

我想创建一个SELECT语句来生成此输出:

Person_ID  Last_Name  First_Name  ServiceLevel  Level
---------  ---------  ----------  ------------  ----- 
222        Doe        John        ServiceLevel1 4
222        Doe        John        ServiceLevel2 5
222        Doe        John        ServiceLevel3 NULL
555        Doe        Jane        ServiceLevel1 2
555        Doe        Jane        ServiceLevel2 6
555        Doe        Jane        ServiceLevel3 9

感谢。

1 个答案:

答案 0 :(得分:0)

要将列转换为行,可以这么说,您可以使用UNION,如:

select Person_ID, Last_Name, First_Name, 'ServiceLevel1' as ServiceLevel, ServiceLevel1 as [Level]
from PERSONNELSERVICELEVELS
union all
select Person_ID, Last_Name, First_Name, 'ServiceLevel2' as ServiceLevel, ServiceLevel2 as [Level]
from PERSONNELSERVICELEVELS
union all
-- etc.

我在这里使用union all,因为union也会隐式运行一个不同的操作,这在这里是不必要的。

您也可以使用UNPIVOT执行此类操作。