繁体   English   中英

在T-SQL中将列值转置为行

[英]Transpose Column Value to Row in T-SQL

我知道以前可能会问过这个问题,但我确实找不到答案。 我有一个名为#TEMP的临时表,看起来像这样:

+===============================+=============================+
| NAME                          | ATTRIBUTE                   |
+===============================+=============================+                                  
| BadgeType                     | Permanent                   |
+-------------------------------+-----------------------------+
| PrimaryLocationInCompany      | No                          |
+-------------------------------+-----------------------------+
| AdminAccessToProductionServer | No                          |
+-------------------------------+-----------------------------+
| AccessToImportantFIles        | No                          |
+-------------------------------+-----------------------------+
| Waiver_Number                 | 56987                       |
+-------------------------------+-----------------------------+
| Summary                       | User not much active        |
+-------------------------------+-----------------------------+
| TimeStamp                     | 3/3/2009                    |
+-------------------------------+-----------------------------+
| UserID                        | 86478925                    |
+-------------------------------+-----------------------------+

我要做的是将“ Name和“ Attribute值都转换为行。 Attribute值可能会有所不同,但Name值始终是固定的。

结果应如下所示:

+----------+---------------+------------------------------+--------------------------------+-----------------------+--------------------------------------------------------+----------+-----------+
| UserID   | BadgeType     | PrimaryLocationIntelFacility | adminAccessToProductionServer  | AccessToClassifiedData| Info_Sec_Waiver_Number                                 | Summary  | TimeStamp |
+----------+---------------+------------------------------+--------------------------------+-----------------------+--------------------------------------------------------+----------+-----------+
| 11313403 | GREEN         | No                           | No                             | No                    | This contingent worker is eligible for remote access.  | 3/3/2009 |           |
+----------+---------------+------------------------------+--------------------------------+-----------------------+--------------------------------------------------------+----------+-----------+

尝试这个

SELECT UserID,BadgeType,PrimaryLocationInCompany,AdminAccessToProductionServer,AccessToImportantFIles,WaiverNumber,Summary,[TimeStamp]
FROM
(
    SELECT * FROM #Temp
) p
PIVOT
(
    MIN([ATTRIBUTE]) FOR [NAME] IN(BadgeType,PrimaryLocationInCompany,AdminAccessToProductionServer,AccessToImportantFIles,WaiverNumber,Summary,[TimeStamp],UserID)
) T

还要检查以下动态列

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + [NAME]
                    from #Temp
                    group by [NAME]
            FOR XML PATH('')) 
        ,1,1,'')

set @query = 'SELECT  ' + @cols + ' from 
             (
                select * from #Temp
            ) x
            pivot 
            (
                MAX([ATTRIBUTE])
                for [NAME] in (' + @cols + ')
            ) p '

execute(@query)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM