当前位置: 首页 > 知识库问答 >
问题:

在SQL[复制]中动态地将行转换为列

公冶才
2023-03-14

我的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      - ... 

我怎样才能实现它?提前谢谢。

共有1个答案

夏飞跃
2023-03-14

如果函数/结果数量未知,则需要动态创建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