powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Селект задваиает столбцы
5 сообщений из 5, страница 1 из 1
Селект задваиает столбцы
    #40074706
Александр Кузьминов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Подскажите, нужно получить количество выполненных и назначенных запросов, но при выводе получаем два одинаковых столбца с количеством выполненных запросов, подозреваю что где-то спряталась логическая ошибка (у селектов немного разное условие и присоединение к таблице tbl_employee производится различными ключами), но не пойму где


select
e.title AS "ФИО сотрудника",
count (distinct sc.id) as "Количество Назначенных запросов",
count (distinct sc1.number_) as "Количество Выполненных запросов"
from tbl_servicecall sc
join tbl_servicecall sc1 on sc.number_=sc1.number_
join tbl_log tl on tl.story$request=sc.id
join tbl_employee e on e.id=tl.story$currentresp_em
join tbl_ou ou on ou.id=e.parent_id
where
tl.story$currstatecode='firstLine'
and tl.story$prevstatecode='waitfirstLine'
and sc.creation_date between current_date and current_date+1
and ou.title like 'Отдел'
and sc1.id in (select distinct sc2.id
from tbl_servicecall sc2
left join tbl_employee e on e.id=sc2.solvedbyemployee_id
left join tbl_ou ou on ou.id=e.parent_id
left join tbl_employee e1 on e1.id=sc2.resp2line_em
where sc2.datedecision between current_date and current_date+1 -- выполнено за сегодня
and ou.title like 'Отдел')
GROUP BY e.title
ORDER BY e.title
...
Рейтинг: 0 / 0
Селект задваиает столбцы
    #40074710
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Кузьминов
Добрый день!
Подскажите, нужно получить количество выполненных и назначенных запросов, но при выводе получаем два одинаковых столбца с количеством выполненных запросов, подозреваю что где-то спряталась логическая ошибка (у селектов немного разное условие и присоединение к таблице tbl_employee производится различными ключами), но не пойму где


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select 
e.title AS "ФИО сотрудника",
count (distinct sc.id) as "Количество Назначенных запросов",
count (distinct sc1.number_) as "Количество Выполненных запросов"
	from tbl_servicecall sc
join tbl_servicecall sc1 on sc.number_=sc1.number_
join tbl_log tl on tl.story$request=sc.id
join tbl_employee e on e.id=tl.story$currentresp_em
join tbl_ou ou on ou.id=e.parent_id
	where 
tl.story$currstatecode='firstLine'
and tl.story$prevstatecode='waitfirstLine'
and sc.creation_date between current_date and current_date+1
and ou.title like 'Отдел'
and sc1.id in (select distinct sc2.id
				from tbl_servicecall sc2
			  	left join tbl_employee e on e.id=sc2.solvedbyemployee_id
				left join tbl_ou ou on ou.id=e.parent_id
				left join tbl_employee e1 on e1.id=sc2.resp2line_em
			    where sc2.datedecision between current_date and current_date+1 -- выполнено за сегодня
			    and ou.title like 'Отдел')   
GROUP BY e.title
ORDER BY e.title 




считай агрегаты ДО джойнов. В CTE или в подзапросе (derived table)
а потом доджойнивай всё что нужно

пс
подзапрос для sc1.id in (... - жуткая жуть !
...
Рейтинг: 0 / 0
Селект задваиает столбцы
    #40074785
Александр Кузьминов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court, не совсем понял ответ, при использовании CTE столбец Назначено тиражируется на всех сотрудников общим значением

with recursive serv (title, number_, id) AS (
select
e.title,
ts.number_,
ts.id as num
from tbl_servicecall ts
left join tbl_employee e on e.id=ts.solvedbyemployee_id
left join tbl_ou ou on ou.id=e.parent_id
left join tbl_employee e1 on e1.id=ts.resp2line_em
where
ts.datedecision between current_date and current_date+1 -- выполнено за сегодня
and ou.title like 'Отдел ИТ-поддержки пользователей'
Group BY e.title, ts.id
union all
select
e.title,
ts1.number_,
serv.id+1
from tbl_servicecall ts
join serv on ts.number_ = serv.id
left join tbl_employee e on e.id=ts.solvedbyemployee_id
left join tbl_ou ou on ou.id=e.parent_id
left join tbl_employee e1 on e1.id=ts.resp2line_em
join tbl_servicecall ts1 on ts.id = ts1.id
--
left join tbl_log tl on tl.story$request=ts1.id
join tbl_employee e2 on e2.id=tl.story$currentresp_em
where
ou.title like 'Отдел ИТ-поддержки пользователей'
and tl.story$currstatecode='firstLine'
and tl.story$prevstatecode='waitfirstLine'
and ts1.creation_date between current_date and current_date+1
)
select
distinct serv.title as "ФИО",
count (distinct serv.id) as "Выполненно",
(select count(serv.number_) from serv) as "Назначено"
from serv
group by serv.title
...
Рейтинг: 0 / 0
Селект задваиает столбцы
    #40074801
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Кузьминов,

Ну так берете убираете из запроса всю дополнительную муть и на минимальном примере смотрите что у вас в результатах промежуточных.
Там сразу все становится понятно обычно.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Селект задваиает столбцы
    #40074802
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Кузьминов
столбец Назначено тиражируется на всех сотрудников общим значением

нуу ещё бы !
Александр Кузьминов
Код: sql
1.
2.
3.
4.
5.
6.
select
distinct serv.title as "ФИО",
count (distinct serv.id) as "Выполненно",
(select count(serv.number_) from serv) as "Назначено"
from serv
group by serv.title


а что это (выделил) должно возвращать ?
и при чём здесь рекурсия ... ?

вообщем, начни с "простого"
1
https://www.sql.ru/faq/faq_topic.aspx?fid=202
2
пример данных, - результат на этих данных
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Селект задваиает столбцы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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