通常这反过来工作,但我想通过 SQL 将单个记录分成多个记录。
我们存储具有开始和结束日期的范围,但需要导出范围中每一年的记录。
示例:TECH_ID
有一个begin_date
2009 年和end_date
2011 年的记录。我们需要导出 2009 年、2010 年和 2011 年的 3 条记录。
如何实现?
通常这反过来工作,但我想通过 SQL 将单个记录分成多个记录。
我们存储具有开始和结束日期的范围,但需要导出范围中每一年的记录。
示例:TECH_ID
有一个begin_date
2009 年和end_date
2011 年的记录。我们需要导出 2009 年、2010 年和 2011 年的 3 条记录。
如何实现?
CREATE TABLE Numbers
(
Number INT NOT NULL,
CONSTRAINT PK_Numbers
PRIMARY KEY CLUSTERED (Number)
WITH FILLFACTOR = 100
)
INSERT INTO Numbers
SELECT
(a.Number * 256) + b.Number AS Number
FROM
(
SELECT number
FROM master..spt_values
WHERE
type = 'P'
AND number <= 255
) a (Number),
(
SELECT number
FROM master..spt_values
WHERE
type = 'P'
AND number <= 255
) b (Number)
GO
现在你有一个数字表......
SELECT DISTINCT
n.Number
FROM
Numbers n
JOIN TECH_ID t
ON n.Number BETWEEN t.begin_date AND t.end_date
创建一个每年有一行的表(一些 RDBMS 有快捷方式)。然后做
Select
t.*,
y.Year
From
Years y
Inner Join
tech_id t
On Year(t.begin_date) <= y.Year And Year(t.end_date) >= y.Year
当我阅读您的问题时,并未明确提及示例数据。顺便说一句,我写这个作为一个例子,根据你拥有的任何东西将一条记录放在三条记录中。
Select *
From (
Select 1 As Id
, 'Test' As Name
) As SampleRecord
Cross Join
(
Select 2009 As Year
Union Select 2010
Union Select 2011
) As Years
干杯