如何实现特定行转列的数据格式转换?仅用Query还是需用Reporting?
行转列表格转换:仅用Query即可实现
原始数据
| Software | Count | Install Status |
|---|---|---|
| QWE | 1 | INSTALLED |
| ASD | 54 | INSTALLED |
| ASD | 3 | PENDINGINSTALL |
| ASD | 3 | FAILED |
期望转换结果
| Software | INSTALLED | PENDINGINSTALL | FAILED | TOTAL |
|---|---|---|---|---|
| QWE | 1 | 1 | ||
| ASD | 54 | 3 | 3 | 60 |
这种行转列的透视需求完全不需要依赖Reporting工具,仅通过Query就能实现。主流数据库都支持这类转换,以下是两种常见实现方式:
方式1:使用CASE WHEN(通用兼容所有SQL数据库)
SELECT Software, SUM(CASE WHEN InstallStatus = 'INSTALLED' THEN Count ELSE 0 END) AS INSTALLED, SUM(CASE WHEN InstallStatus = 'PENDINGINSTALL' THEN Count ELSE 0 END) AS PENDINGINSTALL, SUM(CASE WHEN InstallStatus = 'FAILED' THEN Count ELSE 0 END) AS FAILED, SUM(Count) AS TOTAL FROM your_table_name GROUP BY Software;
方式2:使用PIVOT(适用于支持该语法的数据库,如SQL Server、Oracle)
SELECT Software, ISNULL(INSTALLED, 0) AS INSTALLED, ISNULL(PENDINGINSTALL, 0) AS PENDINGINSTALL, ISNULL(FAILED, 0) AS FAILED, (ISNULL(INSTALLED, 0) + ISNULL(PENDINGINSTALL, 0) + ISNULL(FAILED, 0)) AS TOTAL FROM your_table_name PIVOT ( SUM(Count) FOR InstallStatus IN (INSTALLED, PENDINGINSTALL, FAILED) ) AS PivotTable;
直接执行上述Query就能生成你需要的列结构结果,无需额外通过Reporting工具做二次转换。
内容的提问来源于stack exchange,提问作者Jgaard
相关产品推荐
相关产品推荐

