将单个记录分成多个

Posted

技术标签:

【中文标题】将单个记录分成多个【英文标题】:Break a single record into multiple 【发布时间】:2012-11-06 22:18:41 【问题描述】:

通常情况相反,但我想通过 SQL 记录。

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

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

如何做到这一点?

【问题讨论】:

您使用的是什么 RDBMS?您可以发布一些示例数据,然后发布所需的结果吗? 从 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

【讨论】:

啊!正是我想要的!谢谢!【参考方案2】:

创建一个每年有一行的表(一些 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

【讨论】:

【参考方案3】:

当我阅读您的问题时,并未明确提及示例数据。顺便说一句,我写这个作为一个例子,根据你有什么把一个记录放在三个记录上。

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

干杯

【讨论】:

以上是关于将单个记录分成多个的主要内容,如果未能解决你的问题,请参考以下文章

将多个记录更新为单个记录

Hive : 当列值由分隔符 (~) 分隔时,将单个记录扩展为多个记录

如何为单个模型保存多个单独的记录

Rails 3中单个记录的多个外键?

将一个软件分成多个模块,每个模块都有自己的数据库更好吗?

从单个文件打开多个文档