1

我有两张表,一张(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

尝试了一堆不同的东西,但无法弄清楚。

任何帮助,将不胜感激!

4

2 回答 2

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  
于 2013-01-03T18:34:51.390 回答
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正确设置列的方法。

于 2013-01-03T18:30:33.370 回答