SQL:以开始日期为基础显示日常联接数据

时间:2013-10-09 18:15:50

标签: sql ms-access join

也许我的头衔有误导性,但我不知道怎么说这句话。我有两个表,tblL和tblDumpER。它们基于字段SubjectNumber加入。这是一个(tblL)到多个(tblDumpER)关系。

我需要编写一个查询,它将为我的所有主题提供与tblL中的日期关联的tblDumpER的值。这就是说:

SELECT tblL.SubjectNumber, tblDumpER.ER_Q1
FROM tblL
LEFT JOIN tblDumpER ON tblL.SubjectNumber=tblDumpER.SubjectNumber
WHERE tblL.RandDate=tblDumpER.ER_DATE And tblDumpER.ER_Q1 Is Not Null

这很简单。我的问题是来自tblL的RandDate值对于每个主题都是不同的。但是,它需要显示为Day1,因此我可以将tblDumpER.ER_Q1作为Day1用于每个主题。然后我需要RandDate + 1 As Day2等,直到我击中null或Day84。 '哑'解决方案是编写84个查询。这显然不实用。任何建议将不胜感激!

我很欣赏到目前为止的回复,但我认为我没有正确解释这一点,所以这里有一些示例数据:

SubjectNumber RandDate

1001 1/1/2013
1002 1/8/2013
1003 1/15/2013

SubjectNumber ER_DATE ER_Q1

1001 1/1/2013 5
1001 1/2/2013 6
1001 1/3/2013 2
1002 1/8/2013 1
1002 1/9/2013 10
1002 1/10/2013 8
1003 1/15/2013 7
1003 1/16/2013 4
1003 1/17/2013 3

期望的结果: (其中Day1 = RandDate,Day2 = RandDate + 1,Day3 = RandDate + 2)

SubjectNumber Day1_ER_Q1 Day2_ER_Q1 Day3_ER_Q1

1001 5 6 2
1002 1 10 8
1003 7 4 3

然后将该数据绘制在图表上,其中X轴为Day#,Y轴为ER_Q1

2 个答案:

答案 0 :(得分:0)

我会分两步完成:

  • 创建一个获取每个SubjectNumber
  • 的MIN日期的查询
  • 将此查询加入现有查询,以便您可以对MIN日期和当前记录的日期执行DATEDIFF计算。

答案 1 :(得分:0)

我不完全确定你需要什么,但也许日历表会有所帮助。只需创建一个包含一年中所有日期的本地表,然后使用该表来加入您的日期?