我有两个表:SHARES和TRANSACTIONS股票包含公司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'