SQL эквивалент формулы COUNTIFs Excel? - PullRequest
0 голосов
/ 01 июня 2019

Я пытаюсь воссоздать некоторую формулу Excel в Netezza Aginity SQL, чтобы обработка могла выполняться на уровне базы данных, но при этом возникают проблемы с индексами.

Формула примерно:

If( Countifs( policycolumn, policy, matchcolumn, "Match", codecolumn, code) >0, "true", "false")

Так что, если есть строки, соответствующие политике, «соответствию» и коду, оно будет больше 0 и будет истинным. Я просто борюсь с частью политики 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, с "match" и "c". Эта строка совпадает с тем, что будет> 0 и вызовет правило IF, которое будет «да»

ROw 2 не будет положительным, потому что, хотя его номер политики 12345, это "нет совпадения" и "d".

Строка 3 была бы положительной, потому что политика строки 9876 - это «соответствие» и «с».

Строка 4 не является положительной, потому что политика строки 9898 - это «нет совпадения».

Все критерии (Match Column = match и Codecolumn = c) должны быть выполнены, чтобы эта строка была истинной, а для нового столбца было установлено значение "yes".

1 Ответ

0 голосов
/ 04 июня 2019

Этот 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

Пожалуйста, дайте мне знать, если это помогло

...