首页 > 解决方案 > 基于行级别的多列动态透视 Oracle 和 SQL Server

问题描述

我有如下数据:

在此处输入图像描述

我正试图把它变成这个形状:

在此处输入图像描述

我已经看过这个解决方案Multi Column Pivot SQL Server,但它使用硬编码值,这不是我的情况,因此我认为使用动态数据透视会更安全。任何人都可以帮忙吗?

标签: sqlsql-serveroracledynamicpivot

解决方案


您可以使用条件聚合:

select id_card_no,
       max(case when city_rank = 1 then city end) as city_1,
       max(case when city_rank = 1 then visitratio end) as visitratio_1,
       max(case when city_rank = 2 then city end) as city_2,
       max(case when city_rank = 2 then visitratio end) as visitratio_2
from t
group by id_card_no;

这是标准 SQL,应该适用于任何数据库。


推荐阅读