sql将额外的行信息显示为列

f45qwnt8  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(260)

考虑下表:

User   | Device
-------+-----------
User 1 | Device 1
User 2 | Device 2
User 3 | Device 1
User 4 | Device 3

在本例中,如何在单独的列中获取每个设备1的用户?

Device 1 | User 1 | User 3
Device 2 | User 2 |
Device 3 | User 4 |

每个设备可以有多于2个用户;实际上最大值是未知的

wwwo4jvm

wwwo4jvm1#

你可以用 row_number() 和条件聚合:

select
    device,
    max(case when rn = 1 then user end) user1,
    max(case when rn = 2 then user end) user2,
    ...
from (
    select t.*, row_number() over(partition by device order by user) rn
    from mtable t
) t
group by device
order by device

您可以扩展 select 根据需要使用更多条件表达式的子句。当给定设备的用户排气时,将显示以下列 null 价值观。

tzcvj98z

tzcvj98z2#

将数据拼接成单独的列是很棘手的——除非您知道最大用户数。
通常对于这种类型的问题,最简单的解决方案是通过串联字符串将值放入单个列中。确切的语法取决于数据库,但sql标准语法是:

select device, listagg(user, ',') within group (order by user) as users
from t
group by device;

相关问题