通常情况下,这种方式可以采用其他方式,但我想通过SQL将单个记录分解为多个记录。将单个记录分解为多个
我们存储了开始日期和结束日期的范围,但是需要在范围内输出每年的记录。
例子:TECH_ID
有2009年的begin_date
和2011年,我们需要end_date
出口3条记录2009年,2010年,和2011年
这又如何实现呢?
通常情况下,这种方式可以采用其他方式,但我想通过SQL将单个记录分解为多个记录。将单个记录分解为多个
我们存储了开始日期和结束日期的范围,但是需要在范围内输出每年的记录。
例子:TECH_ID
有2009年的begin_date
和2011年,我们需要end_date
出口3条记录2009年,2010年,和2011年
这又如何实现呢?
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
AH!正是我在找什么!谢谢! –
每年一排(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
干杯
您使用的RDBMS是什么?你可以发布一些样本数据,然后得到期望的结果吗? – Taryn
从ODBC中拉出并导出到CSV以上载FTP。 –