繁体   English   中英

资料整理——SQL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM