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

Откуда:
Сообщений: 14
Здравствуйте, есть две таблицы:

1. talons с полями (keyid, type_id, dat, status)
2. types с полями (keyid, text)

Каждый талон связан с типом по полю type_id

Поле status может иметь значения:
0 - В очереди
1 - На приме
2 - Принят
3 - Возврат
4 - Аннулирован

В таблице talons каждая запись имеет уникальный keyid. У каждой записи может меняться только поле status.

keyidtype_iddatstatus
42608.10.2018 8:181
43608.10.2018 8:240
266721.11.2018 5:532
267421.11.2018 5:544
268621.11.2018 5:553


KEYIDTEXT
1Платные
2По направлению
3Ивалиды


Мне нужно вывести талоны в таком виде:

ТипВ очереди На приеме Принят Возврат Аннулирован Кол-во
Платные111115
По направлению111115
Ивалиды111115


Как это можно сделать?
8 фев 19, 18:47    [21804765]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6485
https://www.sql.ru/faq/faq_topic.aspx?fid=210
8 фев 19, 18:49    [21804770]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
НатальяСер
Member

Откуда:
Сообщений: 14
alex-ls, не очень поняла пример. Есть другой?
8 фев 19, 18:52    [21804773]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28679
RTFM Pivoting Operations (FAQ)
8 фев 19, 18:53    [21804775]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
НатальяСер
Member

Откуда:
Сообщений: 14
Elic, А как это реализовать на моем примере? Не могу догнать как сделать транспонирование
8 фев 19, 19:00    [21804779]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9340
НатальяСер
А как это реализовать на моем примере? Не могу догнать как сделать транспонирование


Покажи что ты слепила - посмотрим что не так.

SY.
8 фев 19, 19:10    [21804786]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
НатальяСер
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]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
НатальяСер
Member

Откуда:
Сообщений: 14
SY, не могу разобраться в pivot вот и прошу помощи
8 фев 19, 19:37    [21804824]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
НатальяСер
Member

Откуда:
Сообщений: 14
А можно все-таки для моего случая пример как через pivot реализовать?
8 фев 19, 19:39    [21804827]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
НатальяСер
Member

Откуда:
Сообщений: 14
Или словами поподробнее опишите пожалуйста как должен работать pivot в моем случае
8 фев 19, 19:47    [21804837]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9340
НатальяСер
SY, не могу разобраться в pivot вот и прошу помощи


Навскидку:

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]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
НатальяСер
Member

Откуда:
Сообщений: 14
У меня ругается на строку

for tl.status in (

Пишет

ORA-01748: здесь допустимо только простые имена столбцов
8 фев 19, 19:54    [21804848]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
НатальяСер
Member

Откуда:
Сообщений: 14
Разобралась, убрала tl.. Объясните пожалуйста как работает этот код
8 фев 19, 19:56    [21804851]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17095
НатальяСер,

+
select pt.* 
     , "В очереди"+"На приме"+"Принят"+"Возврат"+"Аннулирован" "Кол-во"
  from (select tp.text as "Тип", tl.keyid, tl.status 
          from types tp, talons tl
         where tl.type_id(+) = tp.KEYID
           and tl.dat(+) between to_date('08.02.2017','dd.mm.yyyy') and to_date('08.02.2019','dd.mm.yyyy')
         )
pivot(count(keyid) 
        for status in ( 0 as "В очереди"
                      , 1 as "На приме"
                      , 2 as "Принят"
                      , 3 as "Возврат"
                      , 4 as "Аннулирован"
                      )
     ) pt
;
8 фев 19, 19:58    [21804855]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9340
НатальяСер
У меня ругается на строку

for tl.status in (

Пишет

ORA-01748: здесь допустимо только простые имена столбцов


Упс, for status in ( a не for tl.status in (

SY.
8 фев 19, 20:27    [21804890]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9340
НатальяСер
Разобралась, убрала tl.. Объясните пожалуйста как работает этот код


А что неясно? Доку курила? Или минздрав не разрешает?

SY.
8 фев 19, 20:29    [21804892]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи по статусу  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6485
НатальяСер
alex-ls, не очень поняла пример. Есть другой?

там все так разжевано, что дальше некуда и про pivot там в комментах написано, но тут как обычно разжевали еще больше...
9 фев 19, 07:36    [21805057]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить