通常这种方法相反,但我想通过SQL将单个记录分成多个记录。
我们存储一系列包含开始日期和结束日期,但是需要在该范围内导出每年的记录。
示例:TECH_ID
的2009年begin_date
和2011年的end_date
。我们需要导出2009年,2010年和2011年的3条记录。
如何实现这一目标?
答案 0 :(得分:1)
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
答案 1 :(得分:1)
创建一个每年有一行的表(某些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
答案 2 :(得分:1)
在我阅读你的问题时,没有明确提到样本数据。顺便说一下,我写这个作为一个例子,根据你拥有的东西将一条记录放到三条记录中。
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
干杯