2017-06-26 8 views
1

3つのフィールドを作成するCTEがあります。 MemberID、開始日、終了日。 MemberInYearsという名前の新しいフィールドを追加する後続のCTEを作成したいとします。 この新しいフィールドには、メンバーがアクティブになっているすべての年が含まれている必要があります。SQLの中間に数値を表示

MemberID Start End   MemberInYears 
1   2002 2005  2002,2003,2004, 2005 
2   2003 2004  2003,2004 
3   2001 2003  2001,2002,2003 

私はさまざまなアプローチを試みましたが、答えが見つからないようです。どんな助けでも大歓迎です。

は、以下の文字列の連結のためのSQL Serverの構文を使用して、あなたに

+1

タグあなたを使用することができますあなたが使っているデータベースの質問。 –

+0

複数のアプローチを試みたが、これらのアプローチは機能しなかったのは何ですか? – GrumpyCrouton

答えて

0

ありがとう:

with cte as 
     select memberid, start, end, cast(start as varchar(max)) as years, start as y 
    from t 
    union all 
    select memberid, start, end, years + ',' + cast(y+1 as varchar(max)) as years, y+1 
    from t 
    where y < end 
) 
select memberid, start, end, years 
from cte; 
0

あなたのDBMSを指定していないが、Postgresので、あなたがgenerate_series()

select memberid, 
     min(x) as start, 
     max(x) as "end", 
     string_agg(x::text, ',' order by x) as MemberInYears 
from the_cte, 
    generate_series(start, "end") as t(x) 
group by memberid 
order by memberid; 
関連する問題