具有以下
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 !
在 SQL 中,PIVOT 操作本身不直接支持动态值。但是,您确实可以使用动态 SQL(通常在 SQL 环境中使用
EXECUTE_IMMEDIATE
或等效命令)来生成和执行动态查询,其中包括具有动态确定值的 PIVOT 操作。
根据@Damião Martins 的说法,这个用例展示了如何使用EXECUTE_IMMEDIATE。
将此答案发布为社区 Wiki,因为这是唯一可能的解决方法,并且为了将来可能遇到此用例的社区的利益。
请随时编辑此答案以获取更多信息,以及是否有针对此用例的其他可能的解决方法/直接解决方案。