1

2つのテーブルがあります。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

およびフィールドを持つ2番目のテーブル(start_date_table) :month_end_date, id, start_date

month_end_date    id         start_date
2011-12-31       123456        1980-12-31

2つのテーブルを結合したいのですが、start_date_tableデータはmarket_cap_dataテーブルの1年前に終了します。start_date_tableに最新のstart_dateを使用したデータがない場合に、最新のデータを入力したいと思います。たとえば、外部結合の代わりに次のようになります。

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 に答える