同一行中的前3个值

cl25kdpy  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(301)

我正在处理steam数据,需要找到每个游戏使用的前3个标签,但问题是每个游戏的所有标签值都在同一行中,如下图所示(appid列,然后每个标签和值的370列)。
结果可以是任何像200300400或列名加标签值像行动| 200,fps | 300,rpg | 400等每一个36k游戏。该表如下所示,有大约36k个游戏。我绝对不想只找到一个专栏或前三名的游戏。
appid是唯一的,每个标记大约有370列,我已经为sql准备了一个合适的格式。你能帮帮我吗?

1l5u6lss

1l5u6lss1#

如果取消分割数据,查询将变得微不足道。要取消分割数据,您需要检索表元数据,并根据下面所示的逻辑组装一个大型sql。请参见下面查询中的标记。
解决方案如下所示:

select
  *
from (
  select *,
    row_number() over(partition by appid order by cnt desc) as rn
  from (
    -- unpivot the data using dynamic SQL
    select appid, "1980" as tag, [1980] as cnt from t union all
    select appid, "1990", [1990] from t union all
    select appid, "2_5d", [2_5d] from t union all
    select appid, "2d", [2d] from t union all
    select appid, "2d_fighter", [2d_fighter] from t union all
    ...
    select appid, "last_tag", [last_tag] from t
    -- finish unpivoting
  ) x
) y
where rn <= 3
order by appid, rn
8mmmxcuj

8mmmxcuj2#

可以使用information\u schema.columns视图获取该表的所有列名。有了它,您可以很容易地生成一些sql语句来获取数据。
另一种选择是使用ssis或PowerBI来透视数据。

相关问题