没有硬编码值的 PIVOT?

问题描述 投票:0回答:1

具有以下

PIVOT

with purchases as (
  SELECT * from UNNEST([
    STRUCT(1 as id,'Tom' as buyer, 108 as cost),
    (2,'Brady', 17),
    (3,'Tom', 19)
  ])
) select * from (select * except(id) from purchases)
PIVOT (SUM(cost) FOR buyer in ('Tom', 'Brady'))

我在

IN
之后的表达式列表中手动指定名称。但是,如果我有 500 个名字怎么办?我是否必须指定所有这些,或者我可以只说“买家栏”之类的内容吗?我基本上可以怎么做:

PIVOT (SUM(cost) FOR buyer) -- excluding the IN -- I want all values !
google-bigquery pivot
1个回答
1
投票

在 SQL 中,PIVOT 操作本身不直接支持动态值。但是,您确实可以使用动态 SQL(通常在 SQL 环境中使用

EXECUTE_IMMEDIATE
或等效命令)来生成和执行动态查询,其中包括具有动态确定值的 PIVOT 操作。

根据@Damião Martins 的说法,这个用例展示了如何使用EXECUTE_IMMEDIATE

将此答案发布为社区 Wiki,因为这是唯一可能的解决方法,并且为了将来可能遇到此用例的社区的利益。

请随时编辑此答案以获取更多信息,以及是否有针对此用例的其他可能的解决方法/直接解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.