3

希望是一个直截了当的问题(但我怀疑答案很困难)。我有 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、游标等,但一直陷入困境或认为必须有更简单的方法。关于如何解决这个问题的任何建议?我查看了“类似问题”,但似乎找不到我的特定问题。如果这基本上已经被问到,我很抱歉。

谢谢

4

2 回答 2

1

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

于 2013-01-24T22:12:22.173 回答
0

select distinct START_DT, END_DT from ( select START_DT, END_DT from #TABLE_A union select START_DT, END_DT from #TABLE_b )b

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

于 2013-01-25T03:08:04.787 回答