2

通常这反过来工作,但我想通过 SQL 将单个记录分成多个记录。

我们存储具有开始和结束日期的范围,但需要导出范围中每一年的记录。

示例:TECH_ID有一个begin_date2009 年和end_date2011 年的记录。我们需要导出 2009 年、2010 年和 2011 年的 3 条记录。

如何实现?

4

3 回答 3

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
于 2012-11-06T22:23:00.903 回答
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
于 2012-11-06T22:24:39.863 回答
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

干杯

于 2012-11-06T22:25:24.327 回答