Используя функцию DECODE, меняя дату на любую строку? - PullRequest
0 голосов
/ 26 октября 2018

У меня есть 2 таблицы: АКЦИИ и ОПЕРАЦИИ . Акции содержит идентификатор компании, название и т. Д. Транзакции содержит дату сделки, shareid.Мне нужен запрос на выборку, в котором перечислены ДАТА транзакции и ИМЯ КОМПАНИИ, НО, если на акции компании не было транзакции, он все равно должен появиться в списке, но в столбце даты должно быть написано «Нет сделки».

Пример:

АКЦИИ

shareid companyname
0       Apple
1       Microsoft
2       Samsung
3       Nokia

СДЕЛКИ:

transactionid   shareid  date
0               0        2016-12-4
1               1        2015-5-3
2               2        2014-10-22
3               2        2014-11-11

Нужный мне запрос должен сделатьследующий список:

Apple      2016-12-4
Microsoft  2015-5-3
Samsung    2014-10-22
Samsung    2014-11-11
Nokia      No trade

Задача говорит, что формат даты должен быть YYYY-MM-DD и необходимо использовать функции DECODE и TO_CHAR.

1 Ответ

0 голосов
/ 26 октября 2018

Похоже на простое внешнее соединение со мной.Я бы использовал coalesce() вместо decode(), однако:

select s.companyname, 
       coalesce(to_char(t.date, 'yyyy-mm-dd'), 'No trade')
from shares s 
   left join transactions t on s.shareid = t.shareid
order by s.companyname;

Внешнее объединение вернет все строки из таблицы shares и значение null в столбце transactions.date для этих акций.что не было транзакции.to_char() преобразует дату в строку, а coalesce() выберет первое ненулевое значение.Так что если t.date равно нулю, возвращается 'No trade'

...