sql - 完成此 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 |
+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+
解决方案
你需要做一个动态的数据透视表。首先,您需要声明应创建的所有列。这是通过@Cols
声明完成的。然后你需要进行一个包含所有列的调用,这在@SQL
此处的声明中完成。最后,调用由 EXEC 执行。由于图像我没有数据,我只能解释逻辑,而不是实际的最终结果,但是如果您将数据添加为表格,我可以将查询调整为那个。
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)
推荐阅读
- javascript - 如何在 angular 中访问 http 响应中的嵌套数组和对象
- c - 对于扫雷网格布局,一些地雷打印为 0
- python - 使用python在文件中合并具有相同键值对的json对象
- sonarqube - Bitbucket 的声纳失败,缺少“组件”参数
- sql - 波斯语全文索引停止列表
- rest - API 设计:如何处理第三方的 API 错误
- react-native - react-native-mapbox-gl 在发布模式下时应用程序崩溃
- python - 它们是一种内置方法,可直接用于使用 python-gitlab 通过名称搜索 gitlab 存储库吗
- excel - Excel VBA公式不计算
- mobx - MobX 表示 StoreProvider 组件中有一个提供的值不能转换为 observable