我正在尝试在Netezza Aginity SQL中重新创建一些excel公式,以便可以在数据库级别完成处理,但很难解决计数问题。
公式大致为:
If( Countifs( policycolumn, policy, matchcolumn, "Match", codecolumn, code) >0, "true", "false")
因此,如果有任何行与策略和"匹配"和代码匹配,它将大于 0 并且为 true。我只是在为政策 colimn 部分而苦苦挣扎,因为要计算的政策是该行中的政策。
人们有什么办法使用某些东西来模仿sql中的计数吗?
编辑:举一些例子,我的数据集看起来像:(对不起,我的格式不好):
policycolumn | matchcolumn | codecolumn
12345 | match | c
12345 | no match | d
9876 | match | c
9876 | no match | c
我想要一个额外的列来显示
policycolumn | matchcolumn | codecolumn | yesno
12345 | match | c | yes
12345 | no match | d | no
9876 | match | c | yes
9876 | match | d | no
第 1 行将是"是",因为它计算 12345 出现的次数,带有"匹配"和"c"。此行匹配,因此为>0,并触发 IF 规则为"yes">
ROw 2 不会是肯定的,因为它虽然它的保单编号为 12345,但它是"不匹配"和"d"。
第 3 行为"是",因为该行策略编号 9876 是"匹配"和"c"。
第 4 行不是"是",因为该行策略编号 9876 是"不匹配"。
必须满足所有条件(匹配列 = 匹配和代码列 = c)才能使该行为 true,并将新列设置为"yes"。
这个SQL应该按照你的要求去做。
select policycolumn, matchcolumn, codecolumn,
case when matchcolumn = 'match' and codecolumn = 'c' then 'yes' else 'no' end yesno
from <your table>
测试结果
with test_data_set as(
select 12345 policycolumn, 'match' matchcolumn, 'c' codecolumn union all
select 12345, 'no match', 'd' union all
select 9876, 'match', 'c' union all
select 9876, 'match', 'd')
select policycolumn, matchcolumn, codecolumn,
case when matchcolumn = 'match' and codecolumn = 'c' then 'yes' else 'no' end yesno
from test_data_set;
*returns*
policycolumn matchcolumn codecolumn yesno
12345 match c yes
12345 no match d no
9876 match c yes
9876 match d no
请让我知道它是否有帮助