Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Помощь в сложении строк  [new]
Александр Кузьминов
Member

Откуда:
Сообщений: 10
Всем доброго дня!
Нужна помощь в сложении строк, суть в следующем:
есть SQL запрос:

select tou.title, count(distinct ts.title)
from tbl_team te
join tbl_servicecall ts on ts.responsibleteam_id=te.id
join tbl_employee_teams et on te.id = et.teams_id
join tbl_employee e on et.employee_id = e.id
join tbl_ou tou on e.parent_id=tou.id
where ts.state not in ('closed', 'resolved', 'negotiation', 'waiting') and ( tou.title='Группа сервис-менеджмента'
or tou.title='Группа поддержки корпоративных систем') --and ts.title='PB433246'
Group by tou.title

который выводит следующее:

"title" "count"
"Группа поддержки корпоративных систем" "117"
"Группа сервис-менеджмента" "178"

значение столбца count -текстовые (пример PB75167)
Необходимо объединить две строки столбца title в "Группа сервис-менеджмента" и сложить значения столбца count (117+178)
Как это можно реализовать?
Заранее спасибо
14 фев 20, 12:20    [22079881]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в сложении строк  [new]
Lonepsycho
Member

Откуда: Siauliai, Литва
Сообщений: 570
Александр Кузьминов,

GROUP BY + string_agg(...)
14 фев 20, 12:30    [22079895]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в сложении строк  [new]
Александр Кузьминов
Member

Откуда:
Сообщений: 10
Lonepsycho, это не совсем то что нужно, на выходе нужно получить такой результат:


"title" "count"
"Отдел сервис менеджмента" "295"
14 фев 20, 12:38    [22079907]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в сложении строк  [new]
entrypoint
Member

Откуда:
Сообщений: 227
Александр Кузьминов,

-- Тестовые данные
WITH a(title) AS (
	SELECT 'Группа 1' UNION ALL
	SELECT 'Группа 1' UNION ALL
	SELECT 'Группа 1' UNION ALL
	SELECT 'Группа 2' UNION ALL
	SELECT 'Группа 2' UNION ALL
	SELECT 'Группа 3' UNION ALL
	SELECT 'Группа 3' UNION ALL
	SELECT 'Группа 3' UNION ALL
	SELECT 'Группа 3' UNION ALL
	SELECT 'Группа 4' UNION ALL
	SELECT 'Группа 5' 
)
-- Решение
SELECT QUOTE_IDENT(title) || QUOTE_IDENT(COUNT(title)||'') 
FROM a GROUP BY title
14 фев 20, 13:00    [22079941]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в сложении строк  [new]
Lonepsycho
Member

Откуда: Siauliai, Литва
Сообщений: 570
Александр Кузьминов

"title" "count"
"Группа поддержки корпоративных систем" "117"
"Группа сервис-менеджмента" "178"

из вашего примера не очевидно как эти два тайтла групировать, но предположу что они не важны, и тогда:

SELECT
  'Группа сервис-менеджмента', sum(t.cnt)
FROM (
select tou.title, count(distinct ts.title) AS cnt
from tbl_team te
join tbl_servicecall ts on ts.responsibleteam_id=te.id
join tbl_employee_teams et on te.id = et.teams_id
join tbl_employee e on et.employee_id = e.id
join tbl_ou tou on e.parent_id=tou.id
where ts.state not in ('closed', 'resolved', 'negotiation', 'waiting') and ( tou.title='Группа сервис-менеджмента'
or tou.title='Группа поддержки корпоративных систем') --and ts.title='PB433246'
Group by tou.title
) AS t


ну или вы как-то давайте хотябы игрушечные данные как пример того что есть, и того что хотите получить. а то как из "Группа поддержки корпоративных систем" и "Группа сервис-менеджмента" получить "Группа сервис-менеджмента" не совсем понятно, т.е. тут разные варианты...
14 фев 20, 13:10    [22079966]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в сложении строк  [new]
Александр Кузьминов
Member

Откуда:
Сообщений: 10
Lonepsycho, прошу прощения за не точную формулировку вопросаНеобходимо объединить группу... и отдел... в отдел...(в нашем случае сервис-менеджмента) и сложить значения в столбце count по каждому отделу чтобы получилось

Отдел сервис-менеджмента 295

сейчас данные выводятся как на скрине

сам запрос:

select tou.title,
count (distinct ts.title)
from tbl_team te
join tbl_servicecall ts on ts.responsibleteam_id=te.id
join tbl_employee_teams et on te.id = et.teams_id
join tbl_employee e on et.employee_id = e.id
join tbl_ou tou on e.parent_id=tou.id
where ts.state not in ('closed', 'resolved', 'negotiation', 'waiting') and ( tou.title='Группа сервис-менеджмента'
or tou.title='Отдел сервис-менеджмента')
Group by tou.title

К сообщению приложен файл. Размер - 15Kb
14 фев 20, 13:21    [22079979]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в сложении строк  [new]
Александр Кузьминов
Member

Откуда:
Сообщений: 10
Lonepsycho, Спасибо большое! Ваш вариант работает!!!
14 фев 20, 13:24    [22079981]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить