提问人:Jonathan P 提问时间:11/11/2023 更新时间:11/11/2023 访问量:29
Jinja sql - 如何混合和匹配列名,并有条件地基于多个列表变量执行计算
Jinja sql - How to mix and match column names and conditionally perform calculations based on multiple list variables
问:
目标:使用 Jinja 和 SQL 创建一个模板,用于根据标准化列名计算指标。
用例:us_outlet_dollars + us_fullprice_dollars = us_total_dollars。代码将查找前缀“us”或“ca”以及后缀“outlet_dollars”和“fullprice_dollars”,然后遍历所有组合,将两者相加得到总计。所有列都已存在,但我会检查总列数是否计算准确,如果没有,则强制这样做。最终,我想更进一步,区分“美元”、“单位”和“成本”。
基表:
us_outlet_dollars | us_fullprice_dollars | us_total_dollars | ca_outlet_dollars | ca_fullprice_dollars | ca_total_dollars |
---|---|---|---|---|---|
10 | 10 | 20 | 零 | 15 | 零 |
10 | 零 | 零 | 15 | 15 | 30 |
预期结果:
us_outlet_dollars | us_fullprice_dollars | us_total_dollars | ca_outlet_dollars | ca_fullprice_dollars | ca_total_dollars |
---|---|---|---|---|---|
10 | 10 | 20 | 0 | 15 | 15 |
10 | 0 | 10 | 15 | 15 | 30 |
这是我的问题:在下面的代码中,我尝试声明前缀和后缀变量,并使用循环生成 case 语句。我能够让它正常工作的唯一方法是对后缀进行内联硬编码。有没有办法利用后缀变量来完全模板化这个任务?
{% set prefixes = ["us","ca"] %}
{% set suffixes = ["fullprice_dollars", "outlet_dollars", "total_dollars"] %}
{% for suffix in suffixes %}{% for prefix in prefixes %}
CASE
WHEN
COALESCE({{ prefix }}fullprice_dollars, 0) + COALESCE({{ prefix }}outlet_dollars, 0) = COALESCE({{ prefix }}total_dollars, 0)
THEN COALESCE({{ prefix }}total_dollars, 0)
ELSE
COALESCE({{ prefix }}fullprice_dollars, 0) + COALESCE({{ prefix }}outlet_dollars, 0)
END AS {{ prefix }}total_dollars,
{% endfor %}{% endfor %}
答: 暂无答案
评论