powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Последовательный выбор и подсчет строк по изменяющемуся параметру.
13 сообщений из 13, страница 1 из 1
Последовательный выбор и подсчет строк по изменяющемуся параметру.
    #39641196
Вадим_T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Помогите, пожалуйста с запросом:

SELECT 'Группа№1' , sum(nvl(zn.znach),0)
FROM (
SELECT count(*) as znach FROM primary
WHERE OPEN_TIME >= SYSDATE-1
and (DEADLINE - SYSDATE)*24 < 8 and STATUS='Открыт'
and ITEM in ('K721', 'K563') group by ITEM
) zn;

Мне необходимо подсчитать такое для четырех групп:
ITEM in ('K721', 'K563'), ITEM in ('K322', 'K055') , ITEM in ('K129', 'K616', 'K255'), ITEM in ('K361', 'K076', 'K982', 'K451').
Не хочется делать отдельно 4 практически идентичных запроса (или объединять их через UNION ALL)
Возможно ли сделать один общий запрос, чтобы в результате было 4 строки с количеством по 4 группам - № 1,2,3,4?
...
Рейтинг: 0 / 0
Последовательный выбор и подсчет строк по изменяющемуся параметру.
    #39641203
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадим_T,

Код: plsql
1.
2.
3.
4.
5.
with мап(итем, группа) as (
select 'K721', 'Группа№1' from dual union all
...
select 'K451', 'Группа№4' from dual
)
...
Рейтинг: 0 / 0
Последовательный выбор и подсчет строк по изменяющемуся параметру.
    #39641221
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадим_T,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select
 CASE 
  when ITEM in ('K721', 'K563') then 'Группа№1' ;
  when ITEM in ('K322', 'K055') then 'Группа№2' ;
  when ITEM in ('K129', 'K616', 'K255') then 'Группа№3' ;
  when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4' ;
  else '?????'  end
,nvl(sum(zn.znach),0) ss
....
where ITEM in ('K721', 'K563', все коды) 
group by 
CASE 
 when ITEM in ('K721', 'K563') then 'Группа№1' ;
 when ITEM in ('K322', 'K055') then 'Группа№1' ;
 when ITEM in ('K129', 'K616', 'K255') then 'Группа№1' ;
 when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№1' ;
 else '?????'  end



.....
stax
...
Рейтинг: 0 / 0
Последовательный выбор и подсчет строк по изменяющемуся параметру.
    #39641225
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

ой, count(*)

....
stax
...
Рейтинг: 0 / 0
Последовательный выбор и подсчет строк по изменяющемуся параметру.
    #39641263
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадим_T,

А не подскажите тайный смысл такой конструкции?
Код: plsql
1.
and (DEADLINE - SYSDATE)*24 < 8 


(DEADLINE - SYSDATE) в днях, *24 - ну в бухгалтерии есть понятие 22 рабочих дня в месяце .... но 24?
Ну и 8 - это 8 месяцев ... 2/3 года, Вы триместрами работаете?
...
Рейтинг: 0 / 0
Последовательный выбор и подсчет строк по изменяющемуся параметру.
    #39641271
Вадим_T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,
Переводим дни в часы и сравниваем с 8.
Вычисляем где до дедлайна осталось меньше 8 часов
...
Рейтинг: 0 / 0
Последовательный выбор и подсчет строк по изменяющемуся параметру.
    #39641294
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переводим дни в часы

Дни в часы переводятся делением на 24.
...
Рейтинг: 0 / 0
Последовательный выбор и подсчет строк по изменяющемуся параметру.
    #39641300
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm,
А ну покаж магию.... ажно хотся взглянуть как ты будешь дялить....


Вадим_T,
всегда удивлялся намеренному извращению отдельных личностей, зачем вы не даете ораклу пользоваться индексами буде таковые созданы?
...
Рейтинг: 0 / 0
Последовательный выбор и подсчет строк по изменяющемуся параметру.
    #39641328
Вадим_T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vint,
Данные извращения от незнания. Я не разбираюсь в индексах.
+ прав на чужую БД и индексы у меня нету, только на чтение из таблиц.
...
Рейтинг: 0 / 0
Последовательный выбор и подсчет строк по изменяющемуся параметру.
    #39641330
Вадим_T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
Большое Спасибо!
Пока собрать sql запрос не получилось, нет времени.
О результатах сообщу :)
...
Рейтинг: 0 / 0
Последовательный выбор и подсчет строк по изменяющемуся параметру.
    #39641751
Вадим_T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StaxВадим_T,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select
 CASE 
  when ITEM in ('K721', 'K563') then 'Группа№1' ;
  when ITEM in ('K322', 'K055') then 'Группа№2' ;
  when ITEM in ('K129', 'K616', 'K255') then 'Группа№3' ;
  when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4' ;
  else '?????'  end
,nvl(sum(zn.znach),0) ss
....
where ITEM in ('K721', 'K563', все коды) 
group by 
CASE 
 when ITEM in ('K721', 'K563') then 'Группа№1' ;
 when ITEM in ('K322', 'K055') then 'Группа№2' ;
 when ITEM in ('K129', 'K616', 'K255') then 'Группа№3' ;
 when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4' ;
 else '?????'  end



.....
stax

Спасибо! Подскажите, пожалуйста, а как можно срастить 2 таких запроса через left outer join?
Ну т.е. группы идентичные (первый столбец), но количество (count) из других таблиц отличается и дописывается 3 столбцом.
Я что-то делаю не так с "ON" ? :

select
CASE
when ITEM in ('K721', 'K563') then 'Группа№1'
when ITEM in ('K322', 'K055') then 'Группа№2'
when ITEM in ('K129', 'K616', 'K255') then 'Группа№3'
when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4'
else '?????' end as G1
, count(*) as SS1 from primary P1
left outer join
(
select
CASE
when ITEM in ('K721', 'K563') then 'Группа№1'
when ITEM in ('K322', 'K055') then 'Группа№2'
when ITEM in ('K129', 'K616', 'K255') then 'Группа№3'
when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4'
else '?????' as G2 end
, count(*) as SS2 from primary2
where ITEM in ('K721', 'K563', все коды)
group by
CASE
when ITEM in ('K721', 'K563') then 'Группа№1'
when ITEM in ('K322', 'K055') then 'Группа№2'
when ITEM in ('K129', 'K616', 'K255') then 'Группа№3'
when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4'
else '?????' end
) P2
ON P1.G1 = P2.G2
where ITEM in ('K721', 'K563', все коды)
group by
CASE
when ITEM in ('K721', 'K563') then 'Группа№1'
when ITEM in ('K322', 'K055') then 'Группа№2'
when ITEM in ('K129', 'K616', 'K255') then 'Группа№3'
when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4'
else '?????' end;
...
Рейтинг: 0 / 0
Последовательный выбор и подсчет строк по изменяющемуся параметру.
    #39641799
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
DECLARE 
  D1 DATE := SYSDATE+5;
  D2 DATE := SYSDATE+5+6/24;
  D3 DATE := ADD_MONTHS(SYSDATE+6/24,5);
BEGIN
  DBMS_OUTPUT.PUT_LINE('D1 - SYSDATE: '||(D1 - SYSDATE)||'  TRUNC(D1 - SYSDATE):'||TRUNC(D1 - SYSDATE));
  DBMS_OUTPUT.PUT_LINE('D2 - SYSDATE: '||(D2 - SYSDATE)||'  TRUNC(D2 - SYSDATE):'||TRUNC(D2 - SYSDATE));
  DBMS_OUTPUT.PUT_LINE('D3 - SYSDATE: '||(D3 - SYSDATE)||'  TRUNC(D3 - SYSDATE):'||TRUNC(D3 - SYSDATE));
END;


Код: plaintext
1.
2.
3.
D1 - SYSDATE: 5           TRUNC(D1 - SYSDATE):5
D2 - SYSDATE: 5,25      TRUNC(D2 - SYSDATE):5
D3 - SYSDATE: 153,25  TRUNC(D3 - SYSDATE):153
разница между датами - целое число = дни, дробное = доля суток. :)

Вадим_T,
Может так?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT 
 DECODE(ITEM,'K721',1,'K563',1,'K322',2,'K055',2,'K129',3, 'K616', 3,'K255',3,'K361',4, 'K076',4, 'K982',4, 'K451' ,4) GR_NUM,
 count(*) as znach 
FROM primary
WHERE OPEN_TIME >= SYSDATE-1 and (DEADLINE - SYSDATE)*24 < 8 and STATUS='Открыт'
and ITEM in ('K721', 'K563','K322', 'K055','K129', 'K616', 'K255','K361', 'K076', 'K982', 'K451')
group by DECODE(ITEM,'K721',1,'K563',1,'K322',2,'K055',2,'K129',3, 'K616', 3,'K255',3,'K361',4, 'K076',4, 'K982',4, 'K451' ,4)
ORDER BY 1


GR_NUMZNACH18727631264105
...
Рейтинг: 0 / 0
Последовательный выбор и подсчет строк по изменяющемуся параметру.
    #39641973
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадим_TСпасибо! Подскажите, пожалуйста, а как можно срастить 2 таких запроса через left outer join?
Ну т.е. группы идентичные (первый столбец), но количество (count) из других таблиц отличается и дописывается 3 столбцом.
Я что-то делаю не так с "ON" ? :



Код: 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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
with primary (item) as (
select 'K721' from dual union all
select 'K563' from dual union all
select 'K111' from dual union all
select 'K322' from dual)
,primary2 (item) as (
select 'K055' from dual union all
select 'K361' from dual union all
select 'K111' from dual union all
select 'K361' from dual union all
select 'K255' from dual)
select nvl(z1.g1,z2.g1) g,z1.ss1 ss1,z2.ss1 ss2 From 
(
select
 CASE 
  when ITEM in ('K721', 'K563') then 'Группа№1' 
  when ITEM in ('K322', 'K055') then 'Группа№2' 
  when ITEM in ('K129', 'K616', 'K255') then 'Группа№3' 
  when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4' 
  else '?????'  end as G1
, count(*) as SS1 
from primary P1 where item in ('K721','K563','K322')
group by
 CASE 
  when ITEM in ('K721', 'K563') then 'Группа№1' 
  when ITEM in ('K322', 'K055') then 'Группа№2' 
  when ITEM in ('K129', 'K616', 'K255') then 'Группа№3' 
  when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4' 
  else '?????'  end
) z1 
full outer join
(
select
 CASE 
  when ITEM in ('K721', 'K563') then 'Группа№1' 
  when ITEM in ('K322', 'K055') then 'Группа№2' 
  when ITEM in ('K129', 'K616', 'K255') then 'Группа№3' 
  when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4' 
  else '?????'  end as G1
, count(*) as SS1 
from primary2 P1 where item in ('K563','K055','K076','K361')
group by
 CASE 
  when ITEM in ('K721', 'K563') then 'Группа№1' 
  when ITEM in ('K322', 'K055') then 'Группа№2' 
  when ITEM in ('K129', 'K616', 'K255') then 'Группа№3' 
  when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4' 
  else '?????'  end
) z2
on z1.g1=z2.g1
order by 1
/
SQL> /

G               SS1        SS2
-------- ---------- ----------
Группа№1          2
Группа№2          1          1
Группа№4                     2
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Последовательный выбор и подсчет строк по изменяющемуся параметру.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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