powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывести записи по статусу
18 сообщений из 18, страница 1 из 1
Вывести записи по статусу
    #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
Вывести записи по статусу
    #39771325
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вывести записи по статусу
    #39771327
alex-ls, не очень поняла пример. Есть другой?
...
Рейтинг: 0 / 0
Вывести записи по статусу
    #39771329
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вывести записи по статусу
    #39771332
Elic, А как это реализовать на моем примере? Не могу догнать как сделать транспонирование
...
Рейтинг: 0 / 0
Вывести записи по статусу
    #39771335
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НатальяСерА как это реализовать на моем примере? Не могу догнать как сделать транспонирование

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

SY.
...
Рейтинг: 0 / 0
Вывести записи по статусу
    #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
Вывести записи по статусу
    #39771358
Фотография 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
Вывести записи по статусу
    #39771360
SY, не могу разобраться в pivot вот и прошу помощи
...
Рейтинг: 0 / 0
Вывести записи по статусу
    #39771362
А можно все-таки для моего случая пример как через pivot реализовать?
...
Рейтинг: 0 / 0
Вывести записи по статусу
    #39771365
Или словами поподробнее опишите пожалуйста как должен работать pivot в моем случае
...
Рейтинг: 0 / 0
Вывести записи по статусу
    #39771367
Фотография 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
Вывести записи по статусу
    #39771369
У меня ругается на строку

for tl.status in (

Пишет

ORA-01748: здесь допустимо только простые имена столбцов
...
Рейтинг: 0 / 0
Вывести записи по статусу
    #39771371
Разобралась, убрала tl.. Объясните пожалуйста как работает этот код
...
Рейтинг: 0 / 0
Вывести записи по статусу
    #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
Вывести записи по статусу
    #39771379
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НатальяСерУ меня ругается на строку

for tl.status in (

Пишет

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

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

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

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

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


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