将单个记录分成多个

时间:2012-11-06 22:18:41

标签: sql gaps-and-islands

通常这种方法相反,但我想通过SQL将单个记录分成多个记录。

我们存储一系列包含开始日期和结束日期,但是需要在该范围内导出每年的记录。

示例:TECH_ID的2009年begin_date和2011年的end_date。我们需要导出2009年,2010年和2011年的3条记录。

如何实现这一目标?

3 个答案:

答案 0 :(得分: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

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

干杯