簡體   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