1

以下の Date テーブルがあり、今日が 2012 年 1 月 13 日であると仮定します。

DateKey    | AvailabilityPerc  
-----------------------------
2012-01-01 | 79  
2012-01-02 | 80  
2012-01-03 | 85  
2012-01-07 | 75  
2012-01-09 | 90  

スクリプトは次の 2 つのことを行う必要があります
。 1. 2012 年 1 月 1 日から 3 日前までの不足している日付を入力します。つまり、2012 年 1 月 10 日 (現在の日付から 3 日を引いた日付) です。
2. 新しい行のみについて、AvailabilityPerc 列にデフォルトの数値、たとえば 100 を入力します。

結果のテーブルは次のようになります。

DateKey    |  AvailabilityPerc
-------------------------------
2012-01-01 | 79 
2012-01-02 | 80  
2012-01-03 | 85  
2012-01-04 | 100  
2012-01-05 | 100  
2012-01-06 | 100  
2012-01-07 | 75  
2012-01-08 | 100  
2012-01-09 | 90  
2012-01-10 | 100  

これに関するご支援に本当に感謝します。

4

1 に答える 1

0

次のようなものを試してください。

with temp as 
(
   select DateAdd(d, -5,GETDATE()) as d, 23 as val
   UNION
   select DateAdd(d, -3,GETDATE()), 44 as val
   UNION
   select DateAdd(d, -1,GETDATE()), 55 as val
), dates as
(
   SELECT MyDate = CONVERT(DATETIME,'01/01/2012'), 100 as val
   UNION ALL
   SELECT MyDate = DATEADD(D,1,MyDate), 100 as val
   from dates
   WHERE MyDate < DATEADD(D,-3,GETDATE())
)

SELECT d.MyDate, COALESCE(t.val, d.val) FROM dates d
LEFT JOIN temp t
ON Convert(varchar, d.MyDate, 101) = Convert(varchar, t.d, 101)
OPTION (MAXRECURSION  365)
于 2012-07-18T17:02:19.960 に答える