powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как для каждой строки подсчитать по определённому критерию поля
4 сообщений из 4, страница 1 из 1
Как для каждой строки подсчитать по определённому критерию поля
    #39330615
Герундий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача в том, что бы если все поля для определенной строки удовлетворяют опрделеленным условиям, то вывести число этих полей. Если одно поле не удовлетворяет критерию, то вывести число на единицу меньше и так далее.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
create table tmp1 (id number(11,0),
                   num1 number(11,0),  
                   txt varchar2(10)
                  );
/
insert into tmp1 (id,num1,txt) values(1,10,'test10');
/
insert into tmp1 (id,num1,txt) values(2,2,'test10');
/
insert into tmp1 (id,num1,txt) values(3,4,'test4');
/
create table tmp2 (id number(11,0),
                   num1 number(11,0),  
                   txt varchar2(10)
                  );
insert into tmp2 (id,num1,txt) values(1,10,'test10');
/
insert into tmp2 (id,num1,txt) values(2,2,'test10');
/
create table tmp3 (id number(11,0),
                   num1 number(11,0),  
                   txt varchar2(10)
                  );
insert into tmp3 (id,num1,txt) values(1,5,'test10');
/
insert into tmp3 (id,num1,txt) values(2,2,'test10');

select
  tmp1.num1,
  tmp2.num1,
  tmp3.num1,
  CASE 
      WHEN tmp1.num1 is not null AND tmp2.num1 is not null AND tmp3.num1 is not null then 3
      WHEN tmp1.num1 is not null AND tmp2.num1 is null AND tmp3.num1 is null then 2
      WHEN tmp1.num1 is not null AND tmp2.num1 is not null AND tmp3.num1 is null then 1
  end as cnt
from 
  tmp1
      left join tmp2 on tmp1.num1=tmp2.num1
      left join tmp3 on tmp1.num1=tmp3.num1
/



Просто хотелось бы не формировать кучу этих комбинаций, а сделать примерно так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select
  tmp1.num1,
  tmp2.num1,
  tmp3.num1,
  (select SUM(cnt) 
                  from (
                          select 1 as cnt from 
                          dual
                          where 1=case when tmp1.num1 is not null then 1 end
                          union all
                          select 1 from 
                          dual
                          where 1=case when tmp2.num1 is not null then 1 end
                          union all
                          select 1 from 
                          dual
                          where 1=case when tmp2.num1 is not null then 1 end
                        )
  ) as cnt
from 
  tmp1
      left join tmp2 on tmp1.num1=tmp2.num1
      left join tmp3 on tmp1.num1=tmp3.num1
...
Рейтинг: 0 / 0
Как для каждой строки подсчитать по определённому критерию поля
    #39330629
Герундий,
Код: plsql
1.
2.
3.
4.
  CASE WHEN tmp1.num1 is not null then 1 else 0 end +
  CASE WHEN tmp2.num1 is not null then 1 else 0 end +
  CASE WHEN tmp3.num1 is not null then 1 else 0 end
  end as cnt
...
Рейтинг: 0 / 0
Как для каждой строки подсчитать по определённому критерию поля
    #39330636
Код: plsql
1.
2.
3.
4.
  CASE WHEN tmp1.num1 is not null then 1 else 0 end +
  CASE WHEN tmp2.num1 is not null then 2 else 0 end +
  CASE WHEN tmp3.num1 is not null then 4 else 0 end
  end as cnt


Тогда в cnt будет битовая маска выполняющихся условий
...
Рейтинг: 0 / 0
Как для каждой строки подсчитать по определённому критерию поля
    #39330655
Герундий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идеально, спасибо
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как для каждой строки подсчитать по определённому критерию поля
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]