powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объединить таблицу и заменить значение при выводе
11 сообщений из 11, страница 1 из 1
Объединить таблицу и заменить значение при выводе
    #40017489
bors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, ув. форумчане!
Есть данный запрос:

SELECT
ARCHIVE_ID,
DOC_ID AS "ИНВЕНТАРНЫЙ НОМЕР",
SYSDBA.DOCTYPES.DOC_NAME AS "ТИП ДОКУМЕНТА",
VERSION_ID AS "НОМЕР ВЕРСИИ",
DESIGNATIO AS "ОБОЗНАЧЕНИЕ",
NAME AS "НАИМЕНОВАНИЕ",
SYSDBA.USERS.FULLNAME AS "ВЛАДЕЛЕЦ",
SYSDBA.USERS.FULLNAME AS "РЕДАКТИРУЕТСЯ"
FROM
SYSDBA.DOCLIST
LEFT JOIN SYSDBA.DOCTYPES ON SYSDBA.DOCTYPES.DOC_TYPE = SYSDBA.DOCLIST.DOC_TYPE
LEFT JOIN SYSDBA.USERS ON SYSDBA.USERS.USER_ID = SYSDBA.DOCLIST.DESIGNERID
LEFT JOIN SYSDBA.USERS ON SYSDBA.USERS.USER_ID = SYSDBA.DOCLIST.DOC_STATUS

Соль в том что столкнулся с проблемой, которую попробую сейчас описать.
В таблице SYSDBA.DOCLIST.DOC_STATUS хранятся ID которые соответствуют ID таблицы SYSDBA.USERS.USER_ID и вывожу эти имена юзеров, но если значение равно 0 то надо вывести что документ 'Сдан', а вот как это реализовать практически не могу представить, уже разное пробовал, надеюсь на помощь и не бросайтесь помидорами:)
...
Рейтинг: 0 / 0
Объединить таблицу и заменить значение при выводе
    #40017496
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bors
В … DOC_STATUS хранятся ID
Какое нетривиальное решение…
...
Рейтинг: 0 / 0
Объединить таблицу и заменить значение при выводе
    #40017498
bors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

Базу данных проектировал не я, я лишь занимаюсь выборкой, согласно заданию, и не очень успешно по итогу
...
Рейтинг: 0 / 0
Объединить таблицу и заменить значение при выводе
    #40017515
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bors,
самое простое добавить технического юсера с ид=0 и именем 'Сдан'

а так decode(SYSDBA.DOCLIST.DOC_STATUS,0,'Сдан', 'то что счас для <>0') xxx_name

.....
stax
...
Рейтинг: 0 / 0
Объединить таблицу и заменить значение при выводе
    #40017523
bors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, к сожалению, простой вариант решения проблемы пришлось отсечь сразу)
А что касается варианта, который Вы предложили, можете, пожалуйста, более подробно описать? Буду очень признателен, опыт в sql очень небольшой, не так давно работаю
...
Рейтинг: 0 / 0
Объединить таблицу и заменить значение при выводе
    #40017539
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bors,

трудно рисовать что-то подробнее, не совсем понимая вопрос


Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  with DOCLIST(DOC_ID,DESIGNATIO,DOC_STATUS) as(
  2  select 1,'xpd 11',17 from dual union all
  3  select 6,'xrk 73',20 from dual union all
  4  select 8,'xrk ??',21 from dual union all
  5  select 9,'xpd 12',0 from dual )
  6  , USERS(USER_ID,FULLNAME) as(
  7  select 17,'Stax' from dual union all
  8  select 20,'bors' from dual union all
  9  select 27,'Tera' from dual)
 10  select
 11   d.DOC_ID
 12   ,d.DESIGNATIO
 13   ,decode(d.DOC_STATUS,0,'Сдан',u.FULLNAME) FULLNAME
 14  from
 15   DOCLIST d LEFT JOIN USERS u ON u.USER_ID = d.DOC_STATUS
 16* order by 1
SQL> /

    DOC_ID DESIGN FULL
---------- ------ ----
         1 xpd 11 Stax
         6 xrk 73 bors
         8 xrk ??
         9 xpd 12 Сдан



зы
я неуверен что в 22230709 нет очепяток

.....
stax
...
Рейтинг: 0 / 0
Объединить таблицу и заменить значение при выводе
    #40017560
bors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, спасибо, работает :) Поиски в интернете не дали возможности наткнуться на такую замечательную ф-ю
...
Рейтинг: 0 / 0
Объединить таблицу и заменить значение при выводе
    #40017583
bors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, хотел бы еще пользуясь случаем задать вопрос. То что я делаю left join по user_id к DESIGNERID и DOC_STATUS не создаст каких-нибудь проблем? Все дело именно в этих строчках:

SELECT
...
SYSDBA.USERS.FULLNAME AS "ВЛАДЕЛЕЦ",
SYSDBA.USERS.FULLNAME AS "РЕДАКТИРУЕТСЯ"
...
LEFT JOIN SYSDBA.USERS ON SYSDBA.USERS.USER_ID = SYSDBA.DOCLIST.DESIGNERID
LEFT JOIN SYSDBA.USERS ON SYSDBA.USERS.USER_ID = SYSDBA.DOCLIST.DOC_STATUS

Не будет ли конфликта? Потому что стал замечать отсутствие единичных данных при выборке
...
Рейтинг: 0 / 0
Объединить таблицу и заменить значение при выводе
    #40017591
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bors

Не будет ли конфликта? Потому что стал замечать отсутствие единичных данных при выборке


Уточните, что понимается под конфликтом.
Попробуйте написать JOIN и LEFT JOIN, приведите тестовые данные и результат в виде with, и поясните, что вас не устраивает.
...
Рейтинг: 0 / 0
Объединить таблицу и заменить значение при выводе
    #40017597
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bors
Stax, хотел бы еще пользуясь случаем задать вопрос. То что я делаю left join по user_id к DESIGNERID и DOC_STATUS не создаст каких-нибудь проблем? Все дело именно в этих строчках:

SELECT
...
SYSDBA.USERS.FULLNAME AS "ВЛАДЕЛЕЦ",
SYSDBA.USERS.FULLNAME AS "РЕДАКТИРУЕТСЯ"
...
LEFT JOIN SYSDBA.USERS ON SYSDBA.USERS.USER_ID = SYSDBA.DOCLIST.DESIGNERID
LEFT JOIN SYSDBA.USERS ON SYSDBA.USERS.USER_ID = SYSDBA.DOCLIST.DOC_STATUS

Не будет ли конфликта? Потому что стал замечать отсутствие единичных данных при выборке


авторя неуверен что в 22230709 нет очепяток

имхо, добавить алиасы
Код: 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.
29.
  1  with DOCLIST(DOC_ID,DESIGNATIO,DOC_STATUS,DESIGNERID) as(
  2    select 1,'xpd_11',17,27 from dual union all
  3    select 6,'xrk_73',20,0 from dual union all
  4    select 8,'xrk_??',21,0 from dual union all
  5    select 9,'xpd_12',0,20 from dual )
  6  ,USERS(USER_ID,FULLNAME) as(
  7    select 17,'Stax' from dual union all
  8    select 20,'bors' from dual union all
  9    select 27,'Tera' from dual)
 10  select
 11    d.DOC_ID
 12   ,d.DESIGNATIO
 13   ,decode(d.DOC_STATUS,0,'Сдан',u.FULLNAME) FULLNAME_STAT
 14   ,s.FULLNAME FULLNAME_DES
 15  from
 16   DOCLIST d
 17  LEFT JOIN USERS u ON u.USER_ID = d.DOC_STATUS
 18  LEFT JOIN USERS s ON s.USER_ID = d.DESIGNERID
 19* order by 1
SQL> /

    DOC_ID DESIGN FULLNAME_STAT   FULLNAME_DES
---------- ------ --------------- ---------------
         1 xpd_11 Stax            Tera
         6 xrk_73 bors
         8 xrk_??
         9 xpd_12 Сдан            bors

SQL>



.....
stax
...
Рейтинг: 0 / 0
Объединить таблицу и заменить значение при выводе
    #40017788
bors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

авторя неуверен что в 22230709 нет очепяток

Это и пугает: опечаток нет:)

Staxимхо, добавить алиасы

Понял. Думал просто что можно что-то оптимизировать, иль что делаю не так, опыта мало, пока что нет представления особо что плохо/хорошо, что быстро/медленно.
Спасибо за помощь!)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объединить таблицу и заменить значение при выводе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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