Tsql 如何在SQL Server 2008R2中将多列转换为行

Tsql 如何在SQL Server 2008R2中将多列转换为行,tsql,sql-server-2008-r2,Tsql,Sql Server 2008 R2,我一直在尝试生成类似上一个表中所示的数据集。 任何建议都会很有帮助。非常感谢。 需要注意的一点是,此脚本将按字母顺序排列结果度量值-因此它将是A、B、C、D、doller、E、F,而不是可能需要的A、B、C、D、E、F、doller。为了使它现在更简单,我只是在美元列上加了别名,将其强制放在列表的末尾。汤姆,谢谢你, 我返回查询如下 DECLARE @TEMPQUES TABLE(MaxRange NVARCHAR(MAX),MinRange NVARCHAR(MAX),ReferenceT

我一直在尝试生成类似上一个表中所示的数据集。 任何建议都会很有帮助。非常感谢。

需要注意的一点是,此脚本将按字母顺序排列结果度量值-因此它将是
A、B、C、D、doller、E、F
,而不是可能需要的
A、B、C、D、E、F、doller
。为了使它现在更简单,我只是在
美元列上加了别名,将其强制放在列表的末尾。

汤姆,谢谢你, 我返回查询如下

DECLARE  @TEMPQUES TABLE(MaxRange NVARCHAR(MAX),MinRange NVARCHAR(MAX),ReferenceTypeName NVARCHAR(MAX),Instructions NVARCHAR(MAX),Question NVARCHAR(MAX))
insert into @TEMPQUES
SELECT CAST(MaxRange AS nVARCHAR(100)),CAST(MinRange AS NVARCHAR(100)),QuestionnaireReferenceTypeName,Instructions,Question FROM vw_QuestionnaireAnswers WITH(NOLOCK) WHERE QuestionnaireID = 100000

SELECT [QA],[Dimenssion],[Is Material in good packing],[NCR],[Special remarks],[Length] FROM
(SELECT ISNULL(MaxRange,0)  AS MaxRange,ISNULL(MinRange,0) AS MinRange,
        ISNULL(ReferenceTypeName,'NA') AS ReferenceTypeName
        ,ISNULL(Instructions,'NA') AS Instructions,Question 
FROM @TEMPQUES ) AS Questionnaire
UNPIVOT( VALUE FOR [QA] IN([MaxRange],[MinRange],[ReferenceTypeName],[Instructions])
) AS [UNPIVOTED]
PIVOT(MAX(VALUE) FOR Question  IN  ([Dimenssion],[Is Material in good packing],[NCR],[Special remarks],[Length] ) )  AS PVTTable

再见,汤姆,谢谢。这正是我想要实现的。但有一件事我该如何从度量(A-F)中去掉.00。谢谢你哦,我忘了提到这一点-轴列必须是相同的类型,所以我不得不将列从int改为decimal。我不知道如何解决这个问题,因为列可以是一个或另一个,但不能两者兼而有之。谢谢你,汤姆,我所做的不是更改为十进制数据类型,而是将Dollar列更改为Int(所有其他列都是Int)。这样我就不用担心后面的零了。美元列给了我一个圆形的数字,这很好。再次感谢你
DECLARE  @TEMPQUES TABLE(MaxRange NVARCHAR(MAX),MinRange NVARCHAR(MAX),ReferenceTypeName NVARCHAR(MAX),Instructions NVARCHAR(MAX),Question NVARCHAR(MAX))
insert into @TEMPQUES
SELECT CAST(MaxRange AS nVARCHAR(100)),CAST(MinRange AS NVARCHAR(100)),QuestionnaireReferenceTypeName,Instructions,Question FROM vw_QuestionnaireAnswers WITH(NOLOCK) WHERE QuestionnaireID = 100000

SELECT [QA],[Dimenssion],[Is Material in good packing],[NCR],[Special remarks],[Length] FROM
(SELECT ISNULL(MaxRange,0)  AS MaxRange,ISNULL(MinRange,0) AS MinRange,
        ISNULL(ReferenceTypeName,'NA') AS ReferenceTypeName
        ,ISNULL(Instructions,'NA') AS Instructions,Question 
FROM @TEMPQUES ) AS Questionnaire
UNPIVOT( VALUE FOR [QA] IN([MaxRange],[MinRange],[ReferenceTypeName],[Instructions])
) AS [UNPIVOTED]
PIVOT(MAX(VALUE) FOR Question  IN  ([Dimenssion],[Is Material in good packing],[NCR],[Special remarks],[Length] ) )  AS PVTTable