当预先知道可能的值并且没有太多的值需要手动编写 SQL 时 - 您可以使用以下内容:
SELECT
userid,
ts,
MAX(IF(params.name = "a", params.value, NULL)) WITHIN RECORD a,
MAX(IF(params.name = "b", params.value, NULL)) WITHIN RECORD b,
MAX(IF(params.name = "c", params.value, NULL)) WITHIN RECORD c
FROM yourTable
如果可能的值提前“未知”和/或每次运行都是动态的,则可以使用下面的辅助 SQL 来生成上述类型的 SQL。
SELECT 'select userid, ts, ' +
GROUP_CONCAT_UNQUOTED(
'max(if(params.name = "' + STRING(params.name) + '", params.value, null))
WITHIN RECORD as [' + STRING(params.name) + ']'
)
+ ' from yourTable '
FROM (SELECT params.name FROM yourTable GROUP BY params.name)