我试图生成名为month的其他列,并创建其他记录以填充全年的月份。
此原始数据示例
ID | DateModified
---- | ------------
123 | 01-01-2020
123 | 11-05-2020
这是理想的结果
ID | DateModified | Month
--- | ------------ | -----
123 | 01-01-2020 | Jan
123 | 01-01-2020 | Feb
123 | 01-01-2020 | March
123 | 01-01-2020 | April
123 | 11-05-2020 | May
123 | 11-05-2020 | June
123 | 11-05-2020 | July
123 | 11-05-2020 | August
123 | 11-05-2020 | September
123 | 11-05-2020 | October
123 | 11-05-2020 | November
123 | 11-05-2020 | December
请告知如何归档这些结果。
答案 0 :(得分:0)
您可以使用DATEADD来实现
UPDATE a
SET a.DateModified = DATEADD(MONTH, b.Month_Value, a.DateModified )
FROM Your_Table a
INNER JOIN MonthValue_AccordingTo_MonthTextTable b ON a.Month = b.Month_Text
答案 1 :(得分:0)
更新了答案。我希望这对您有用...请注意,它适用于同一年内的日期,而不是下一年。
CREATE TABLE wrk(
id int,
DateModified datetime
)
GO
INSERT INTO wrk values(123, '20200101')
INSERT INTO wrk values(123, '20200511')
GO
WITH
months as(
SELECT 1 AS month_idx, 'jan' AS month_key UNION ALL
SELECT 2 AS month_idx, 'feb' AS month_key UNION ALL
SELECT 3 AS month_idx, 'mar' AS month_key UNION ALL
SELECT 4 AS month_idx, 'apr' AS month_key UNION ALL
SELECT 5 AS month_idx, 'may' AS month_key UNION ALL
SELECT 6 AS month_idx, 'jun' AS month_key UNION ALL
SELECT 7 AS month_idx, 'jul' AS month_key UNION ALL
SELECT 8 AS month_idx, 'aug' AS month_key UNION ALL
SELECT 9 AS month_idx, 'sep' AS month_key UNION ALL
SELECT 10 AS month_idx, 'oct' AS month_key UNION ALL
SELECT 11 AS month_idx, 'nov' AS month_key UNION ALL
SELECT 12 AS month_idx, 'dec' AS month_key
),
w as(
SELECT
w.id, w.DateModified,
--
datepart(month, w.DateModified) AS MonthModifiedFrom,
--
isnull(
datepart(
month,
min(w_next.DateModified)
) - 1,
12 /* December */
) AS MonthModifiedTo
FROM
wrk w
LEFT OUTER JOIN wrk w_next
ON(
w_next.id = w.id
AND w_next.DateModified > w.DateModified
)
GROUP BY w.id, w.DateModified
)
SELECT
w.id, w.DateModified, m.month_key
FROM
w
INNER JOIN months m
ON m.month_idx BETWEEN w.MonthModifiedFrom AND w.MonthModifiedTo