将单个记录分成多个
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
干杯
【讨论】:
以上是关于将单个记录分成多个的主要内容,如果未能解决你的问题,请参考以下文章