我有两个表,一个(market_cap_data
)和month_end_date, id, market_cap
字段:
month_end_date id market_cap
2012-12-31 123456 5000
2011-12-31 123456 4000
以及带有start_date_table
字段的第二个表格month_end_date, id, start_date
:
month_end_date id start_date
2011-12-31 123456 1980-12-31
我想合并两个表,但start_date_table数据在market_cap_data表之前一年结束。我想使用最新的start_date填充start_date_table没有数据的最新数据。例如,代替外部连接,如:
month_end_date id market_cap start_date
2012-12-31 123456 5000 NULL
2011-12-31 123456 4000 1980-12-31
我希望它看起来像
month_end_date id market_cap start_date
2012-12-31 123456 5000 1980-12-31
2011-12-31 123456 4000 1980-12-31
尝试了很多不同的事情,但无法弄明白。
任何帮助将不胜感激!
答案 0 :(得分:2)
SELECT
m.month_end_date,
m.id,
m.market_cap,
CASE
WHEN s.start_date IS NOT NULL THEN s.start_date
ELSE (SELECT MAX(s2.start_date) FROM start_date_table s2 WHERE s2.id = m.id)
END AS start_date
FROM market_cap_data m
LEFT JOIN start_date_table s
ON m.id = s.id
AND m.month_end_date = s.month_end_date
答案 1 :(得分:1)
我认为你会从一个案例陈述中受益,这个没有经过测试,因为我没有一个小提琴来验证
create function get_latest_date_from_table(varchar(100) table_name returns Date
(
return select max(date) from #table_name
)
create procedure modify_null_dates_for_marker
(
max_date Date;
max_date = get_latest_date_from_table('table');
select
foo,
bar
CASE WHEN start_date IS NULL
THEN max_date
ELSE start_date END AS start_date
FROM table
)
这应该提供一种正确设置null
列的方法。