移调字符串
Transposing Strings
我正在探索 MLB 棒球统计数据,这是在球场级别。我想总结一下板块外观层面的pitch。相关栏目:
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
我正在处理一个查询,仅显示每个板块外观的一次迭代 (plt_apprnc_pk),然后是 pitch_number 列(第 1 个间距、第 2 个间距、第 3 个间距等...)显示相应音高编号的每个音高类型。本质上我想通过 pitch_number.
转置 pitch_type
plt_apprnc_pk (unique)| first_pitch | second_pitch | third_pitch
----------------------------------------------------------------
4923215434755714481 | SL | FF | FF
我尝试用 Case 语句来做到这一点(即 CASE WHEN pitch_number = 1 THEN pitch_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
基于 pitch_number 转置这些字符串同时仅保留唯一键的一次迭代的最佳方法是什么?
您可以在查询中使用 Like this 我认为有用:
ISNULL(max(case when pitch_number = 1 THEN pitch_type end),0) as Default_name
I tried doing this with Case statements (ie CASE WHEN pitch_number = 1 THEN pitch_type END). I keep getting multiple rows for each 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;
注意:必须事先知道最大值“pitch_number”。
我正在探索 MLB 棒球统计数据,这是在球场级别。我想总结一下板块外观层面的pitch。相关栏目:
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
我正在处理一个查询,仅显示每个板块外观的一次迭代 (plt_apprnc_pk),然后是 pitch_number 列(第 1 个间距、第 2 个间距、第 3 个间距等...)显示相应音高编号的每个音高类型。本质上我想通过 pitch_number.
转置 pitch_typeplt_apprnc_pk (unique)| first_pitch | second_pitch | third_pitch
----------------------------------------------------------------
4923215434755714481 | SL | FF | FF
我尝试用 Case 语句来做到这一点(即 CASE WHEN pitch_number = 1 THEN pitch_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
基于 pitch_number 转置这些字符串同时仅保留唯一键的一次迭代的最佳方法是什么?
您可以在查询中使用 Like this 我认为有用:
ISNULL(max(case when pitch_number = 1 THEN pitch_type end),0) as Default_name
I tried doing this with Case statements (ie CASE WHEN pitch_number = 1 THEN pitch_type END). I keep getting multiple rows for each 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;
注意:必须事先知道最大值“pitch_number”。