Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何转换/透视SQL表_Sql Server_Sql Server 2008_Pivot_Transpose_Unpivot - Fatal编程技术网

Sql server 如何转换/透视SQL表

Sql server 如何转换/透视SQL表,sql-server,sql-server-2008,pivot,transpose,unpivot,Sql Server,Sql Server 2008,Pivot,Transpose,Unpivot,我有一个SQL表,如下所示: ID StepID Rating Comments StaffID Date ------------------------------------------------------------- 1 1 6 blah blah 1025 2014-03-20 1 2 6 blah blah 1025 2014-03-

我有一个SQL表,如下所示:

ID    StepID   Rating   Comments     StaffID    Date
-------------------------------------------------------------
1     1        6          blah blah     1025      2014-03-20 
1     2        6          blah blah     1025      2014-03-20 
1     3        8          blah blah     1025      2014-03-20 
1     4        7          blah blah     1025      2014-03-20 
ID    Step1   Step2  Step3  Step4  Comments     StaffID    Date
----------------------------------------------------------------------------------
1      6       6      8      7    blah blah     1025    2014-03-20 
正如您所看到的,列ID、注释、标记和日期的数据重复相同

如何将上表转换为如下内容:

ID    StepID   Rating   Comments     StaffID    Date
-------------------------------------------------------------
1     1        6          blah blah     1025      2014-03-20 
1     2        6          blah blah     1025      2014-03-20 
1     3        8          blah blah     1025      2014-03-20 
1     4        7          blah blah     1025      2014-03-20 
ID    Step1   Step2  Step3  Step4  Comments     StaffID    Date
----------------------------------------------------------------------------------
1      6       6      8      7    blah blah     1025    2014-03-20 

感谢您的帮助

您可以这样做:

测试数据

质疑

编辑

如果你不知道你有多少步骤。你需要做一个动态轴心。像这样:

测试数据

获取独特的步骤:

DECLARE @cols VARCHAR(MAX)
SELECT @cols=STUFF
(
    (
        SELECT DISTINCT
            ',' +QUOTENAME('Step'+CAST(tbl.StepID AS VARCHAR(100)))
        FROM
            tbl
        FOR XML PATH('')
    )
,1,1,'')
执行动态轴心的步骤:

DECLARE @query NVARCHAR(4000)=
'SELECT
    *
FROM
(
    SELECT 
        tbl.Comments,
        tbl.Date,
        tbl.ID,
        tbl.Rating,
        tbl.StaffID,
        ''Step''+CAST(tbl.StepID AS VARCHAR(100)) AS StepID
    FROM 
        tbl
) AS sourceTable
PIVOT
(
    MAX(Rating)
    FOR StepID IN ('+@cols+')
) AS pvt
 DROP TABLE tbl'

 EXECUTE(@query)
就我而言,放下桌子:

DROP TABLE tbl

步骤是否始终为1到4?是否必须指定[1]、[2]、[3]、[4]?因为stepid可能并不总是这些值?我该如何解决这个问题?@viv_icious:更新了答案非常感谢您的超快速响应-我现在就来看看:thx thx!没问题。很乐意帮忙
DROP TABLE tbl