转调字符串

sat*_*aya 3 sql transpose snowflake-cloud-data-platform

我正在探索 MLB 棒球统计数据,这是在球场级别的。我想总结一下板材外观层面的音高。相关栏目:

game_pk | pitcher_id | batter_id | inning | pitch_number | pitch_type | plt_apprnc_pk (unique)
----------------------------------------------------------------------------------------------
492321  |   542881   |   518466  |    2   |       1      |    FF      |   4923215428815184662
492321  |   543475   |   571448  |    1   |       2      |    SL      |   4923215434755714481
492321  |   543475   |   571448  |    1   |       1      |    FF      |   4923215434755714481
492321  |   543475   |   571448  |    1   |       3      |    FF      |   4923215434755714481

Run Code Online (Sandbox Code Playgroud)

我正在研究一个仅显示每个板外观(plt_apprnc_pk)的一次迭代的查询,后面是pitch_number列(第一个音高,第二个音高,第三个音高等...)显示相应音高编号的每种音高类型。本质上,我想通过音高数字调换音高类型。

plt_apprnc_pk (unique)| first_pitch | second_pitch | third_pitch
----------------------------------------------------------------
  4923215434755714481 |     SL      |      FF      |     FF

Run Code Online (Sandbox Code Playgroud)

我尝试使用 Case 语句(即 CASE WHENitch_number = 1 THENpitch_type END)来执行此操作。我不断为每个 plt_apprnc_pk 获取多行。

plt_apprnc_pk (unique)| first_pitch | second_pitch | third_pitch
------------------------------------------------------------------
  4923215434755714481 |     SL      |      NULL    |    NULL
  4923215434755714481 |    NULL     |      FF      |    NULL
  4923215434755714481 |    NULL     |      NULL    |     FF
Run Code Online (Sandbox Code Playgroud)

基于pitch_number 转置这些字符串同时仅保留唯一键的一次迭代的最佳方法是什么?

Luk*_*zda 6

我尝试使用 Case 语句(即 CASE WHENitch_number = 1 THENpitch_type END)来执行此操作。我不断为每个 plt_apprnc_pk 获取多行。

这里的模式称为条件聚合:

SELECT plt_apprnc_pk
     ,MAX(CASE WHEN pitch_number = 1 THEN pitch_type END) AS first_pitch 
     ,MAX(CASE WHEN pitch_number = 2 THEN pitch_type END) AS second_pitch 
     ,MAX(CASE WHEN pitch_number = 3 THEN pitch_type END) AS thrid_pitch 
     -- ...
     --,MAX(CASE WHEN pitch_number = n THEN pitch_type END) AS nth_pitch 
FROM tab
GROUP BY plt_apprnc_pk;
Run Code Online (Sandbox Code Playgroud)

注意:必须提前知道最大“pitch_number”。