2012-11-06 74 views
2

通常情况下,这种方式可以采用其他方式,但我想通过SQL将单个记录分解为多个记录。将单个记录分解为多个

我们存储了开始日期和结束日期的范围,但是需要在范围内输出每年的记录。

例子:TECH_ID有2009年的begin_date和2011年,我们需要end_date出口3条记录2009年,2010年,和2011年

这又如何实现呢?

+2

您使用的RDBMS是什么?你可以发布一些样本数据,然后得到期望的结果吗? – Taryn

+0

从ODBC中拉出并导出到CSV以上载FTP。 –

回答

1

You require a numbers table

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 
+0

AH!正是我在找什么!谢谢! –

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 
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 

干杯

相关问题