通过使用DECODE函数,将日期更改为任何字符串



我有两个表:SHARESTRANSACTIONS股票包含公司id、名称等。交易包括交易日期,股票id。我需要一个选择查询,列出交易日期和公司名称,但如果一家公司的股票没有交易,它仍然应该出现在列表中,但在日期栏必须写"没有交易"。

示例:

股票

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。

看起来像是一个简单的外部联接。不过,我会使用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表中的所有行,并在transactions.date列中为那些没有事务的共享返回一个null值。to_char()将日期转换为字符串,coalesce()将选择第一个非空值。因此,如果t.date为空,则返回'No trade'

最新更新