将2个表的日期范围组合到单个表中

时间:2013-01-24 22:05:59

标签: sql sql-server

希望这是一个直截了当的问题(但我怀疑答案很难)。我有2个表,日期范围覆盖相同的“整体”范围,但TABLE_A的范围最初分解了一些,而TABLE_B稍后将其分解:

CREATE TABLE #TABLE_A (
START_DT datetime,
END_DT datetime)

INSERT INTO #TABLE_A VALUES ('4/1/1993', '4/29/1993');
INSERT INTO #TABLE_A VALUES ('4/29/1993', '5/12/1993');
INSERT INTO #TABLE_A VALUES ('5/13/1993', '5/26/1993');
INSERT INTO #TABLE_A VALUES ('5/27/1993', '8/18/1993');
INSERT INTO #TABLE_A VALUES ('2/10/1994', '2/23/1994');
INSERT INTO #TABLE_A VALUES ('2/25/1994', '3/9/1994');
INSERT INTO #TABLE_A VALUES ('3/10/1994', '5/5/1994');

CREATE TABLE #TABLE_B (
START_DT datetime,
END_DT datetime)

INSERT INTO #TABLE_B VALUES ('4/1/1993', '5/12/1993');
INSERT INTO #TABLE_B VALUES ('5/13/1993', '8/18/1993');
INSERT INTO #TABLE_B VALUES ('2/10/1994', '2/22/1994');
INSERT INTO #TABLE_B VALUES ('2/24/1994', '3/23/1994');
INSERT INTO #TABLE_B VALUES ('3/24/1994', '4/20/1994');
INSERT INTO #TABLE_B VALUES ('4/21/1994', '5/5/1994');

我想要的是一个结合了这些范围的TABLE_C:

START DT      END DT    
4/1/1993       4/29/1993      FROM TABLE A
4/29/1993      5/12/1993      FROM TABLE A
5/13/1993      5/26/1993      FROM TABLE A
5/27/1993      8/18/1993      FROM TABLE A
2/10/1994      2/22/1994      FROM TABLE A or TABLE B
2/23/1994       3/9/1994      FROM TABLE A
3/10/1994      3/23/1994      START DT FROM TABLE A, END DT FROM TABLE B
3/24/1994      4/20/1994      FROM TABLE B
4/21/1994       5/5/1994      FROM TABLE B

我对如何创建TABLE_C的任何建议持开放态度。我已经看过尝试使用MERGE,SSIS,游标等,但不断陷入困境或认为必须有一个更简单的方法。有关如何处理此问题的任何建议?我看了“类似的问题”,我似乎无法找到解决我的特定问题。如果基本上已经提出这个问题,我很抱歉。

由于

2 个答案:

答案 0 :(得分:1)

你不会找到一个简单的答案。您将不得不制作一个自定义函数或过程,其中包含您想要的确切逻辑。抱歉。想象一下基于start_dt和每个元组的时间长度的一些软迭代。

答案 1 :(得分:0)

从中选择不同的START_DT,END_DT ( 从#TABLE_A中选择START_DT,END_DT 联盟 从#TABLE_b中选择START_DT,END_DT )B'/ P>

您可以根据需要更改日期格式,并在表格中插入所选数据。它显示合并数据。