开发者社区> 问答> 正文

什么是完成此SQL行到列转置的最简单方法?

这是从选择表:

+---------+-------+------------+-----------------------------+-------+
|   id    | name  |    date    |          dtinsert           | hour  |
+---------+-------+------------+-----------------------------+-------+
| 1355428 | Max   | 2019-12-16 | 2019-12-16 13:29:21.2500000 | 11:26 |
| 1355433 | Max   | 2019-12-16 | 2019-12-16 13:31:07.5133333 | 11:29 |
| 1355436 | Peter | 2019-12-16 | 2019-12-16 13:32:52.1600000 | 11:30 |
| 1355445 | Peter | 2019-12-16 | 2019-12-16 13:36:34.9466667 | 11:33 |
| 1355456 | Troy  | 2019-12-16 | 2019-12-16 13:41:22.7300000 | 11:36 |
+---------+-------+------------+-----------------------------+-------+

这就是我要的

+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+
|              1              |              2              |              3              |              4              |              5              |
+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+
| 1355428                     | 1355433                     | 1355436                     | 1355445                     | 1355456                     |
| Max                         | Max                         | Peter                       | Peter                       | Troy                        |
| 16/12/2019                  | 16/12/2019                  | 16/12/2019                  | 16/12/2019                  | 16/12/2019                  |
| 2019-12-16 13:29:21.2500000 | 2019-12-16 13:31:07.5133333 | 2019-12-16 13:32:52.1600000 | 2019-12-16 13:36:34.9466667 | 2019-12-16 13:41:22.7300000 |
| 11:26                       | 11:29                       | 11:30                       | 11:33                       | 11:36                       |
+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+

展开
收起
祖安文状元 2020-01-04 15:40:08 441 0
1 条回答
写回答
取消 提交回答
  • 您将需要创建一个动态数据透视表。首先,您需要声明所有应创建的列。这是通过@Cols声明完成的。然后,您需要进行一个包含所有列的调用,此操作在@SQL此处的声明中完成。最后,该调用由EXEC执行。由于没有图像数据,我只能解释逻辑,而不是实际最终结果,但是如果您将数据添加为表,则可以针对该查询进行调整。

    ``````js
    

    js DECLARE @SQL VARCHAR(1000) DECLARE @Cols VARCHAR(1000)

    SET @Cols = Stuff((
                SELECT DISTINCT ',' + ' ' + QuoteName(ID) + ''
                FROM [TableName] A
                ORDER BY 1
                FOR XML Path('')
                ), 1, 1, '') + ''
    
      --  Print @Cols
    

    SET @SQL = '

    Select
            Name
            ,' + @Cols + '
         From  [TableName] A
          Pivot (MAX([Columns]) For [ID] in ( ' + @Cols + ')
          ) as pvt
          '
    
        --  Print @SQL
        EXEC (@SQL)
    
    2020-01-04 15:40:26
    赞同 展开评论 打赏
问答分类:
SQL
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载