Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Oracle |
![]() ![]() |
НатальяСер Member Откуда: Сообщений: 14 |
Здравствуйте, есть две таблицы: 1. talons с полями (keyid, type_id, dat, status) 2. types с полями (keyid, text) Каждый талон связан с типом по полю type_id Поле status может иметь значения: 0 - В очереди 1 - На приме 2 - Принят 3 - Возврат 4 - Аннулирован В таблице talons каждая запись имеет уникальный keyid. У каждой записи может меняться только поле status.
Мне нужно вывести талоны в таком виде:
Как это можно сделать? |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8 фев 19, 18:47 [21804765] Ответить | Цитировать Сообщить модератору |
alex-ls Member Откуда: Иркутская обл - Пенза - Москва Сообщений: 6485 |
https://www.sql.ru/faq/faq_topic.aspx?fid=210 |
8 фев 19, 18:49 [21804770] Ответить | Цитировать Сообщить модератору |
НатальяСер Member Откуда: Сообщений: 14 |
alex-ls, не очень поняла пример. Есть другой? |
8 фев 19, 18:52 [21804773] Ответить | Цитировать Сообщить модератору |
Elic Member Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ Сообщений: 28679 |
RTFM Pivoting Operations (FAQ) |
8 фев 19, 18:53 [21804775] Ответить | Цитировать Сообщить модератору |
НатальяСер Member Откуда: Сообщений: 14 |
Elic, А как это реализовать на моем примере? Не могу догнать как сделать транспонирование |
8 фев 19, 19:00 [21804779] Ответить | Цитировать Сообщить модератору |
SY Member Откуда: Middlebury, CT USA Сообщений: 9340 |
Покажи что ты слепила - посмотрим что не так. SY. |
||
8 фев 19, 19:10 [21804786] Ответить | Цитировать Сообщить модератору |
НатальяСер Member Откуда: Сообщений: 14 |
SY, пока что вот это у меня select text, tl.status, count(tl.status) as cnt from types tp left join talons tl on tp.keyid = tl.type_id where trunc(tl.dat) between to_date('08.02.2019','dd.mm.yyyy') and to_date('08.02.2019','dd.mm.yyyy') group by text, tl.status |
8 фев 19, 19:12 [21804791] Ответить | Цитировать Сообщить модератору |
SY Member Откуда: Middlebury, CT USA Сообщений: 9340 |
НатальяСер, Ну и где в твоем SQL пивот? Не хочешь/можешь/понимаешь PIVOT пользуйся дедoвским: SUM( CASE tl.status WHEN 0 THEN 1 ELSE 0 END ) "В очереди" и убери tl.status из GROUP BY. SY. |
8 фев 19, 19:34 [21804819] Ответить | Цитировать Сообщить модератору |
НатальяСер Member Откуда: Сообщений: 14 |
SY, не могу разобраться в pivot вот и прошу помощи |
8 фев 19, 19:37 [21804824] Ответить | Цитировать Сообщить модератору |
НатальяСер Member Откуда: Сообщений: 14 |
А можно все-таки для моего случая пример как через pivot реализовать? |
8 фев 19, 19:39 [21804827] Ответить | Цитировать Сообщить модератору |
НатальяСер Member Откуда: Сообщений: 14 |
Или словами поподробнее опишите пожалуйста как должен работать pivot в моем случае |
8 фев 19, 19:47 [21804837] Ответить | Цитировать Сообщить модератору |
SY Member Откуда: Middlebury, CT USA Сообщений: 9340 |
Навскидку: with t as ( select tp.text, tl.status from types tp left join talons tl on tp.keyid = tl.type_id where trunc(tl.dat) between to_date('08.02.2019','dd.mm.yyyy') and to_date('08.02.2019','dd.mm.yyyy') ) select text, "В очереди", "На приeме", "Принят", "Возврат", "Аннулирован", "В очереди" + "На приeме" + "Принят" + "Возврат" + "Аннулирован" "Кол-во" from t pivot( count(*) for tl.status in ( 0 "В очереди", 1 "На приeме", 2 "Принят", 3 "Возврат", 4 "Аннулирован" ) ) / И на 100% уверен что условие trunc(tl.dat) between to_date('08.02.2019','dd.mm.yyyy') and to_date('08.02.2019','dd.mm.yyyy') должно быть не в WHERE а в ON. SY. |
||
8 фев 19, 19:50 [21804840] Ответить | Цитировать Сообщить модератору |
НатальяСер Member Откуда: Сообщений: 14 |
У меня ругается на строку for tl.status in ( Пишет ORA-01748: здесь допустимо только простые имена столбцов |
8 фев 19, 19:54 [21804848] Ответить | Цитировать Сообщить модератору |
НатальяСер Member Откуда: Сообщений: 14 |
Разобралась, убрала tl.. Объясните пожалуйста как работает этот код |
8 фев 19, 19:56 [21804851] Ответить | Цитировать Сообщить модератору |
andrey_anonymous Member Откуда: Москва Сообщений: 17095 |
НатальяСер,
|
|
8 фев 19, 19:58 [21804855] Ответить | Цитировать Сообщить модератору |
SY Member Откуда: Middlebury, CT USA Сообщений: 9340 |
Упс, for status in ( a не for tl.status in ( SY. |
||
8 фев 19, 20:27 [21804890] Ответить | Цитировать Сообщить модератору |
SY Member Откуда: Middlebury, CT USA Сообщений: 9340 |
А что неясно? Доку курила? Или минздрав не разрешает? SY. |
||
8 фев 19, 20:29 [21804892] Ответить | Цитировать Сообщить модератору |
alex-ls Member Откуда: Иркутская обл - Пенза - Москва Сообщений: 6485 |
там все так разжевано, что дальше некуда и про pivot там в комментах написано, но тут как обычно разжевали еще больше... |
||
9 фев 19, 07:36 [21805057] Ответить | Цитировать Сообщить модератору |
Все форумы / Oracle | ![]() |