我正在尝试在Netezza Aginity SQL中重新创建一些excel公式,以便可以在数据库级别完成处理,但是却遇到了麻烦。
公式大致为:
If( Countifs( policycolumn, policy, matchcolumn, "Match", codecolumn, code) >0, "true", "false")
因此,如果有任何匹配策略,“匹配”和代码的行,它将大于0且为true。我只是在政策结肠炎方面苦苦挣扎,因为要计算的政策就是该行中的政策。
人们有没有办法使用某些东西来模仿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规则为“是”
行2不会为是,因为它的策略号为12345,“不匹配”和“ d”。
第3行为是,因为该行策略号9876是“ match”和“ c”。
第4行不是“是”,因为该行策略号9876是“不匹配”。
该行为真,必须满足所有条件(匹配列=匹配,代码列= c),并将新列设置为“是”。
答案 0 :(得分:0)
此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
请告诉我是否有帮助