我的MicrosoftSQL服务器中有如下表。我想将行转换为列。
我的问题是我不知道前面的结果,结果中可能有超过 3 行。
当前表格
ID - Function - Result - MasterKey
1 - 100 - 31 - 7
1 - 125 - 34 - 7
1 - 138 - 39 - 7
. - . - . - .
. - . - . - .
期望结果
MasterKey - Function1 - Result1 - Function2 - Result2 - Function3 - Result3 - ...
7 - 100 - 31 - 125 - 34 - 138 - 39 - ...
我怎样才能实现它?提前谢谢。
如果函数/结果数量未知,则需要动态创建SQL:
DECLARE @SQL NVARCHAR(MAX) = '';
SET @SQL = 'SELECT MasterKey' +
( SELECT ', Function' + RowNum + ' = MAX(CASE WHEN RowNumber = ' + RowNum + ' THEN [Function] END)' +
', Result' + RowNum + ' = MAX(CASE WHEN RowNumber = ' + RowNum + ' THEN Result END)'
FROM ( SELECT DISTINCT
RowNum = CAST(ROW_NUMBER() OVER (PARTITION BY MasterKey
ORDER BY [Function])
AS VARCHAR(10))
FROM T
) t
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') +
' FROM (SELECT MasterKey, [Function], Result, RowNumber = ROW_NUMBER() OVER (PARTITION BY MasterKey ORDER BY [Function]) FROM T) AS T GROUP BY MasterKey';
EXECUTE sp_executesql @sql;
关于 SQL 小提琴的示例
问题内容: 我正在寻找一种在SQL Server中将行转换为列的有效方法,听说PIVOT速度不是很快,并且我需要处理很多记录。 这是我的示例: 这是我的结果: 如何生成结果? 问题答案: 您可以通过多种方式将数据从多行转换为列。 使用 在SQL Server中,您可以使用该函数将数据从行转换为列: 参见演示。 枢轴数未知 如果您要转置的数目未知,则可以使用动态SQL: 参见演示。 使用聚合函数 如
我有一个这样的表,这个表中的所有用户只有两个特性 我想转换为
问题内容: 考虑下面的示例,其中有一个包含人员记录的 Person 表和一个包含链接到人员的可选属性的 PersonAttribute 表: Table: Person Table PersonAttribute 我将如何编写一个查询,使所有具有属性的人都像列一样返回?我需要的结果集是: 因此,从本质上讲,我需要编写一个查询,该查询将获取所有带有所有唯一属性键的人记录,这些键被转换为具有每个人记录
问题内容: 我的表包含以下列: 我想显示如下: 如您所见,我想将列与自定义列名成对显示。这对是列A和B,列C和D以及列C和D。 问题答案:
问题内容: 我已经在动态SQL中创建了一个过程,该过程具有一个select语句,并且代码如下所示: 当我使用以下语句执行此过程时: 我收到以下错误。 消息245,级别16,状态1,procedurecagroup,第33行将nvarchar值’SELECT [Gro] AS GName,’转换为数据类型int时,转换失败。 我在哪里做错了? 问题答案: 您需要在串联中将所有数字CAST转换为nva