0

我有一个场景,我需要使用以下两个表生成动态 SQL:

在此处输入图像描述

在此处输入图像描述

用户可以在 ref_table 中添加许多行。我需要根据 Ref_table 中的所有条目动态创建以下 SQL:

select sum(case when id=1 then val end)/sum(val) as Red_percent,
    sum(case when id=2 then val end)/sum(val) as Blue_percent,
    sum(case when id=3 then val end)/sum(val) as Green_percent
    from Transaction_table

任何人都可以帮我编写动态 sql 来生成上面包含 ref_table 中所有条目的 sql 吗?

4

1 回答 1

1

首先 - 我建议使用不同的查询方法

select * from (
  select distinct ref, 
    sum(val) over(partition by ref) / sum(val) over() val
  from ref_table r
  join transaction_table t
  using(id)
)
pivot (min(val) for ref in ('Red', 'Blue', 'Green'))    

其次,下面是根据 ref_table 内容生成这个的方法

select '''
select * from (
  select distinct ref, 
    sum(val) over(partition by ref) / sum(val) over() val
  from ref_table r
  join transaction_table t
  using(id)
)
pivot (min(val) for ref in (''' || (select string_agg(distinct '"' || ref || '"') from ref_table)  || '''))
'''    

最后,您可以像下面的示例一样执行它

execute immediate '''
select * from (
  select distinct ref, 
    sum(val) over(partition by ref) / sum(val) over() val
  from ref_table r
  join transaction_table t
  using(id)
)
pivot (min(val) for ref in (''' || (select string_agg(distinct '"' || ref || '"') from ref_table)  || '''))
'''
于 2021-11-18T19:59:59.480 回答