扩展查询的结果集(或使用中间表)?

时间:2011-07-07 17:11:08

标签: sql ms-access join

作为我previous question的后续行动,有一个我想探索的替代方案。我的表格布局如下:

T1:  ID  |  Date  |  Hour  | Interval

时间间隔从112(小时间隔为5分钟),小时从124,日期/ ID是任意的。当我从外部源提取数据时,有些行的间隔为0。如果时间间隔为0,则表示已涵盖整个小时(即从112的所有时间间隔。)

示例数据:

T1:  1  |  1/1/2011  |  1  |  1
     1  |  1/1/2011  |  1  |  4
     1  |  1/1/2011  |  1  |  0

     1  |  1/1/2011  |  2  |  2
     1  |  1/1/2011  |  2  |  5

     1  |  1/1/2011  |  3  |  0

请注意,间隔与0 - 标记的间隔重叠。有什么方法可以将0间隔扩展到一小时的所有12个间隔?所以,我基本上想将示例数据转换为:

T1:  1  |  1/1/2011  |  1  |  1
     1  |  1/1/2011  |  1  |  2
     1  |  1/1/2011  |  1  |  3
     1  |  1/1/2011  |  1  |  4
     ...
     1  |  1/1/2011  |  1  |  11
     1  |  1/1/2011  |  1  |  12

     1  |  1/1/2011  |  2  |  2
     1  |  1/1/2011  |  2  |  5

     1  |  1/1/2011  |  3  |  1
     1  |  1/1/2011  |  3  |  2
     1  |  1/1/2011  |  3  |  3
     ...
     1  |  1/1/2011  |  3  |  11
     1  |  1/1/2011  |  3  |  12

使用SQL是否可以这样?

1 个答案:

答案 0 :(得分:1)

创建一个表“interval”,其中12行包含单个字段“iinterval”,值为1到12。

iinterval
        1
        2
        3
        4
        5
        6
        7
        8
        9
       10
       11
       12

然后,您可以在间隔表和间隔为零的T1行之间进行交叉连接。 (我将T1字段重命名为Date,Hour和Interval,因为这些都是保留字。)

SELECT T1.ID, T1.idate, T1.ihour, intervals.iinterval
FROM T1, intervals
WHERE T1.iinterval=0;

由于没有指定JOIN条件,因此每个T1行(具有零间隔)将与每个间隔行连接。

ID  idate    ihour iinterval
 1  1/1/2011     1         1
 1  1/1/2011     1         2
 1  1/1/2011     1         3
 1  1/1/2011     1         4
 1  1/1/2011     1         5
 1  1/1/2011     1         6
 1  1/1/2011     1         7
 1  1/1/2011     1         8
 1  1/1/2011     1         9
 1  1/1/2011     1        10
 1  1/1/2011     1        11
 1  1/1/2011     1        12

如果得到你想要的间隔等于零的行,你可以在UNION查询中使用它来将这些行添加到间隔零的T1行。

SELECT a.ID, a.idate, a.ihour, a.iinterval
FROM T1 AS a
WHERE a.iinterval<>0
UNION
SELECT T1.ID, T1.idate, T1.ihour, intervals.iinterval
FROM T1, intervals
WHERE T1.iinterval=0;

我希望这能指出一些有用的东西,但怀疑这正是你最终想要的东西。我的预订是因为这个条件:“请注意,间隔和0标记的间隔重叠”。我不知道应对这些重叠会发生什么。