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

Откуда:
Сообщений: 11
Добрый день, недавно стал разбираться в написании запросов. никто не подскажет следующее:
Имеется таблица вида
filial||order_type||date

Как написать запрос, чтобы у каждого филиала была написана услуга и их количество(в таблице всего 4 типа услуг)
filial||order_type1_count||order_type1_count2||order_type1_count3||order_type1_count4

Помогите пожалуйста((
17 июл 17, 13:05    [20650007]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса SQL  [new]
Naf
Member

Откуда: Москва
Сообщений: 2682
select filial,
count(case when order_type=1 then order_type end) as order_type1,
count(case when order_type=2 then order_type end) as order_type2,
...
from T
group by filial
17 июл 17, 14:01    [20650245]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса SQL  [new]
vanchok
Member

Откуда:
Сообщений: 11
Naf,

Спасибо большое!!
17 июл 17, 16:04    [20650801]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса SQL  [new]
vanchok
Member

Откуда:
Сообщений: 11
Naf,

По какой-то причине количество посчитал в разы меньше чем должен был(
17 июл 17, 16:39    [20650996]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса SQL  [new]
vanchok
Member

Откуда:
Сообщений: 11
Naf,

SELECT филиал,
COUNT(case when тип = 'Услуга' then тип end ) as order1,
COUNT(case when тип = 'Личная консультация' then тип end ) as order2,
COUNT(case when тип = 'Консультация по интернету' then тип end ) as order3,
COUNT(case when тип = 'Телефонная консультация' then тип end ) as order4,
COUNT(case when тип = 'Платная услуга' then тип end ) as order5
FROM(
SELECT
AVG(EXTRACT(EPOCH FROM o.order_date AT TIME ZONE 'UTC')) / 10000000000 AS d,
to_char(o.order_date, 'dd.mm.yyyy') AS дата,
COUNT(*) AS заявления,
substring(m.title FROM 0 FOR 48) AS филиал,
substring(u.title FROM 0 FOR 48) AS оператор,
substring(o.service_title FROM 0 FOR 48) AS услуга,
o.order_type as тип
FROM smartcenterorder o, smartcentermfc m, smartcenteruser u
WHERE
o.order_date BETWEEN '2017-04-01' AND '2017-04-02'
GROUP BY дата, филиал, оператор, услуга,тип
) as fo
GROUP BY филиал
ORDER BY order1 DESC

в чем может быть ошибка?( да и select в selecte это плохо(
17 июл 17, 16:49    [20651046]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса SQL  [new]
Naf
Member

Откуда: Москва
Сообщений: 2682
вы в подзапросе (который тут рядом не стоял по-хорошему) сворачиваете данные по полю тип, а потом пытаетесь узнать, а почему их стало меньше
18 июл 17, 09:01    [20652377]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса SQL  [new]
Naf
Member

Откуда: Москва
Сообщений: 2682
Да и в подзапросе чушь какая-то: там декартово произведение, связей между таблицами нет
18 июл 17, 09:06    [20652400]     Ответить | Цитировать Сообщить модератору
Все форумы / Проектирование БД Ответить