Sql server 如何转换/透视SQL表
我有一个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-
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