sql报表记录在多个系统中

5kgi1eie  于 2021-07-09  发布在  Spark
关注(0)|答案(3)|浏览(242)

在sql中工作时,我有一个源系统的数据集和有访问权限的人员的id,简化后如下所示:
系统IDSYS1ASYS2ASYS1BSYS2C
我想出来的是这样的:
idsys1sys2a11b10c01型
我相信这里已经有人找到了解决方法,但我的搜索没有找到任何结果。

vlju58qv

vlju58qv1#

create table mytable (Systems varchar(50),ID varchar(20));
insert into  mytable values('Sys1','A');
insert into  mytable values('Sys2','A');
insert into  mytable values('Sys1','B');
insert into  mytable values('sys2','C');

查询:

select ID, sum(case when Systems='Sys1' then 1 else 0 end)Sys1,
           sum(case when Systems='Sys2' then 1 else 0 end)Sys2
From mytable
Group by ID

输出:
idsys1sys2a11b10c01型
db<>在这里摆弄

ecfdbz9o

ecfdbz9o2#

如果你用的是spark,为什么不利用它的能量呢。读取Dataframe中的数据,然后使用: df.groupBy(col("ID")).pivot(col("System")).count().na.fill(0).show()

t1rydlwq

t1rydlwq3#

如果仅限于少数系统值,则可以使用此查询:

select
  ID
  , MAX(case when system = 'Sys1' then 1 else 0 end) Sys1
  , MAX(case when system = 'Sys2' then 1 else 0 end) Sys2
  , MAX(case when system = 'Sys3' then 1 else 0 end) Sys3
  , MAX(case when system = 'Sys4' then 1 else 0 end) Sys4
  , ....
from table
GROUP BY ID

相关问题