Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывести записи по статусу / 18 сообщений из 18, страница 1 из 1
08.02.2019, 18:47
    #39771323
Вывести записи по статусу
Здравствуйте, есть две таблицы:

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

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

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

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

keyidtype_iddatstatus42608.10.2018 8:18143608.10.2018 8:240266721.11.2018 5:532267421.11.2018 5:544268621.11.2018 5:553

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

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

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

Как это можно сделать?
...
Рейтинг: 0 / 0
08.02.2019, 18:49
    #39771325
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи по статусу
...
Рейтинг: 0 / 0
08.02.2019, 18:52
    #39771327
Вывести записи по статусу
alex-ls, не очень поняла пример. Есть другой?
...
Рейтинг: 0 / 0
08.02.2019, 18:53
    #39771329
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи по статусу
...
Рейтинг: 0 / 0
08.02.2019, 19:00
    #39771332
Вывести записи по статусу
Elic, А как это реализовать на моем примере? Не могу догнать как сделать транспонирование
...
Рейтинг: 0 / 0
08.02.2019, 19:10
    #39771335
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи по статусу
НатальяСерА как это реализовать на моем примере? Не могу догнать как сделать транспонирование

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

SY.
...
Рейтинг: 0 / 0
08.02.2019, 19:12
    #39771338
Вывести записи по статусу
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
...
Рейтинг: 0 / 0
08.02.2019, 19:34
    #39771358
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи по статусу
НатальяСер,

Ну и где в твоем SQL пивот? Не хочешь/можешь/понимаешь PIVOT пользуйся дедoвским:

Код: plsql
1.
2.
3.
4.
5.
6.
SUM(
    CASE tl.status
      WHEN 0 THEN 1
      ELSE 0
    END
   ) "В очереди"



и убери tl.status из GROUP BY.

SY.
...
Рейтинг: 0 / 0
08.02.2019, 19:37
    #39771360
Вывести записи по статусу
SY, не могу разобраться в pivot вот и прошу помощи
...
Рейтинг: 0 / 0
08.02.2019, 19:39
    #39771362
Вывести записи по статусу
А можно все-таки для моего случая пример как через pivot реализовать?
...
Рейтинг: 0 / 0
08.02.2019, 19:47
    #39771365
Вывести записи по статусу
Или словами поподробнее опишите пожалуйста как должен работать pivot в моем случае
...
Рейтинг: 0 / 0
08.02.2019, 19:50
    #39771367
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи по статусу
НатальяСерSY, не могу разобраться в pivot вот и прошу помощи

Навскидку:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
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% уверен что условие

Код: plsql
1.
trunc(tl.dat) between to_date('08.02.2019','dd.mm.yyyy') and to_date('08.02.2019','dd.mm.yyyy')



должно быть не в WHERE а в ON.

SY.
...
Рейтинг: 0 / 0
08.02.2019, 19:54
    #39771369
Вывести записи по статусу
У меня ругается на строку

for tl.status in (

Пишет

ORA-01748: здесь допустимо только простые имена столбцов
...
Рейтинг: 0 / 0
08.02.2019, 19:56
    #39771371
Вывести записи по статусу
Разобралась, убрала tl.. Объясните пожалуйста как работает этот код
...
Рейтинг: 0 / 0
08.02.2019, 19:58
    #39771372
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи по статусу
НатальяСер,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
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
;

...
Рейтинг: 0 / 0
08.02.2019, 20:27
    #39771379
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи по статусу
НатальяСерУ меня ругается на строку

for tl.status in (

Пишет

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

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

SY.
...
Рейтинг: 0 / 0
08.02.2019, 20:29
    #39771381
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи по статусу
НатальяСерРазобралась, убрала tl.. Объясните пожалуйста как работает этот код

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

SY.
...
Рейтинг: 0 / 0
09.02.2019, 07:36
    #39771467
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи по статусу
НатальяСерalex-ls, не очень поняла пример. Есть другой?
там все так разжевано, что дальше некуда и про pivot там в комментах написано, но тут как обычно разжевали еще больше...
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывести записи по статусу / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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