0

これはMyTable構造です

MyTable : ID, Date 

Select ID, Date from MyTable

ID     Date

50    2013-01-01 00:00:00.000 
51    2013-01-02 00:00:00.000 
52    2013-01-02 00:00:00.000 

このような結果を得る必要があります。

ID     Date

50    2013-01-01 00:00:00.000
50    2013-01-02 00:00:00.000
50    2013-01-03 00:00:00.000 

51    2013-01-02 00:00:00.000 
51    2013-01-03 00:00:00.000

52    2013-01-03 00:00:00.000 

結果を取得するにはどうすればよいですか?

4

2 に答える 2

4

日付のリストを取得したいようです。そのため、再帰CTEを使用して、日付のリストを取得できます。

;with data(id, date) as
(
  select id, date
  from mytable
  union all
  select id, dateadd(day, 1, date)
  from data
  where dateadd(day, 1, date) <= '1/3/2013'
)
select *
from data
order by id

SQL FiddlewithDemoを参照してください。これにより、テーブル内の現在の日付と指定した終了日の間の各IDの日付のリストが生成されます。私の例では1/3/2013

于 2013-01-04T13:37:35.213 に答える
0

これは、ID列にクラスター化インデックスがある場合にのみ少し速く機能すると思います。そうでない場合、bluefeetのソリューションは素晴らしいです!

SELECT T1.ID
        ,Date = DATEADD(DAY, -ROW_NUMBER() OVER (PARTITION BY T1.ID ORDER BY (SELECT NULL))+1, '2013-01-03')
FROM MyTable T1
JOIN MyTable T2 ON T1.ID <= T2.ID
于 2013-01-04T14:52:03.063 に答える