首页 > 解决方案 > T-SQL 中的列到行

问题描述

我有表 tbl_Survey:

      SurveyID 1  2  3  4

            7  4  4  4  4
            8  3  3  3  3
            9  2  2  2  2

我的目标是将表头 - 1 2 3 4 转移到行中,如下所示:

enter 
      SurveyID  Ouestion Rating

             7        1       4
             7        2       4
             7        3       4
             7        4       4
             8        1       3
             8        2       3
             8        3       3
             8        4       3
             9        1       2
             9        2       2
             9        3       2
             9        4       2

我的代码是(尝试遵循帮助建议):

     SELECT [SurveyID]
           ,[Question]
           ,[Rating]
  
     FROM 
         [tbl_Survey]
         cross apply
                   (
                    values
                          ('1', 1 ),
                          ('2', 2 ),
                          ('3', 3 ),
                          ('4', 4 )
                   ) c (Question, Rating);

     

结果不完全正确(评级栏有问题):

         SurveyID  Ouestion Rating

             7        1       1
             7        2       2
             7        3       3
             7        4       4
             8        1       1
             8        2       2
             8        3       3
             8        4       4
             9        1       1
             9        2       2
             9        3       3
             9        4       4

     

请帮忙...

我的问题(因为我无法继续)是我的代码没有使用括号。

这是更新的代码:

          SELECT [SurveyID], [Question], [Rating]

          FROM [dbo].[tbl_Survey]

              UNPIVOT
              (
               [Rating]
                
                FOR [Question] in ([1], [2], [3], [4])
               
               ) AS SurveyUnpivot
   

标签: tsqlrowunpivotcross-apply

解决方案


这个怎么样:

DECLARE @T TABLE (SurveyID int, q1 int, q2 int,  q3 int, q4 int) 
INSERT @T (SurveyID, q1, q2, q3, q4) 
VALUES (7,4,4,4,4), (8,3,3,3,3), (9, 2, 2, 2, 2)

SELECT SurveyID, REPLACE(Question,'q','') as Question, Rating 
FROM @T UNPIVOT (Rating FOR Question in (q1, q2, q3, q4)) as UPV

推荐阅读