
[英]SQL Select/View : Can I display data with a “reorganization” of the table?
[英]Data reorganization - SQL
我有一个问题要按照下面指示的方式重组 SQL 中的数据。
我有一个具有给定数据结构的表。
用户名 | 类型 | 数据 |
---|---|---|
测试 | 1个 | 数据1 |
测试 | 1个 | 数据2 |
测试 | 1个 | 数据3 |
测试 | 2个 | 数据1 |
测试 | 2个 | 数据2 |
测试 | 2个 | 数据3 |
使用查询如何获得如下所示的视图? 对于第一列和第二列中的数据相同的那些行,如何从最后一列创建更多列?
用户名 | 类型 | 数据1 | 数据2 | 数据3 |
---|---|---|---|---|
测试 | 1个 | 数据1 | 数据2 | 数据3 |
测试 | 2个 | 数据1 | 数据2 | 数据3 |
假设您事先知道您的每条 output 记录只需要三个值,您可以使用ROW_NUMBER
window function 为您的每个字段提供排名,然后您可以使用条件聚合,使用CASE
表达式来设置您的每个特定领域的数据信息。 最终聚合每个 <Username, Type> 分区。
WITH cte AS (
SELECT tab.*,
ROW_NUMBER() OVER(PARTITION BY UserName, Type ORDER BY Data) AS rn
FROM tab
)
SELECT Username, Type,
MAX(CASE WHEN rn = 1 THEN Data END) AS Data1,
MAX(CASE WHEN rn = 2 THEN Data END) AS Data2,
MAX(CASE WHEN rn = 3 THEN Data END) AS Data3
FROM cte
GROUP BY Username, Type
这可能适用于所有最常见的最新 DBMS。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.