Sql MS Access,包括日期范围查询中的所有日期
在这里访问2010 带着另一个谜团回来。我有一个疑问:Sql MS Access,包括日期范围查询中的所有日期,sql,ms-access,jet,Sql,Ms Access,Jet,在这里访问2010 带着另一个谜团回来。我有一个疑问: SELECT DischargeDatabase.Date, Avg([pH]) AS [pH Value], Avg([Temperature]) AS [Temperature (°C)], Avg([ZincLevel]) AS [Zinc (mg/l)], Sum([Effluent]) AS [Discharge (gal)], Count(*) AS [# Discharges] FROM DischargeDatabase W
SELECT DischargeDatabase.Date, Avg([pH]) AS [pH Value], Avg([Temperature]) AS [Temperature (°C)], Avg([ZincLevel]) AS [Zinc (mg/l)], Sum([Effluent]) AS [Discharge (gal)], Count(*) AS [# Discharges]
FROM DischargeDatabase
WHERE DischargeDatabase.Date Between Forms!QueryForm!TextCriteriaQ0A And Forms!QueryForm!TextCriteriaQ0B
GROUP BY DischargeDatabase.Date;
来自我一直在建立的废水处理数据库。这提供了废水排放的逐日汇总,平均pH值、温度和锌水平,以及废水排放量的总和。用户使用日期选择器在QueryForm的两个文本框中选择一个范围,然后运行查询
显示的是按日期范围按天分组的出院情况,仅列出了有出院的天数。用户请求的是要显示的范围内的每一天,而在DischargeDatabase中没有记录的那些天的字段值只有零
i、 e.从2013年11月4日到2013年16月4日,在一个周末内:
Date | ph Value | Temperature (°C) | Zinc (mg/l) | Discharge (gal) | # Discharges
4/11/2013 9.5 18.6 0.89 5000 5
4/12/2013 9.1 17.9 1.68 3000 2
4/15/2013 8.9 19.6 1.47 10000 7
4/16/2013 9.6 18.2 0.35 1500 1
为此:
Date | ph Value | Temperature (°C) | Zinc (mg/l) | Discharge (gal) | # Discharges
4/11/2013 9.5 18.6 0.89 5000 5
4/12/2013 9.1 17.9 1.68 3000 2
4/13/2013 0.0 0.0 0.0 0 0
4/14/2013 0.0 0.0 0.0 0 0
4/15/2013 8.9 19.6 1.47 10000 7
4/16/2013 9.6 18.2 0.35 1500 1
这样用户就可以将查询粘贴到excel电子表格中,而不会产生任何问题。我甚至不确定这是否可行,或者在查询范围内您选择的是不存在的记录。可能的工作方式是使用预填充了零的伪表/查询进行某种连接
谢谢你的帮助和任何想法 你的最后一句话是正确的!这类事情——即使没有数据,也可以填充所有组——可以用我们称之为数字表或理货表的东西来完成,可以是CTE,也可以是真实的表格,无论你想做什么。您可以展开CTE以生成日期
;WITH CTE AS (
SELECT 1 as Num
UNION ALL
SELECT Num + 1 FROM CTE WHERE Num < @Max
)
SELECT * FROM CTE
此模式可以扩展以生成您的日期
declare @startDate datetime
set @startDate = getdate() --to start from today
;WITH CTE AS (
SELECT @startDate as myDate
UNION ALL
SELECT dateadd(day, 1, myDate) as myDate FROM CTE WHERE myDate < dateadd(day, 30, @startDate)
)
SELECT myDate FROM CTE
现在,您可以将该CTE用作右外部联接中的左表。在Access中,我认为这将需要一个真正的表。只需创建一个日历表并用数字手动填充它-您只需执行一次。使用日历表,这可能相当容易。你可以使用它来构建自己的应用程序 创建一个查询,根据日期范围筛选日历表,并将其左键联接到其他表。在本例中,我简化了选择字段列表 选择 c、 日期, Countddb.日期为[出院] 从…起 tblCalendar AS c 左连接放电数据库作为ddb 在c.日期=ddb.日期 哪里 c、 两人之间的约会 形式!查询表单!文本标准Q0A 还有表格!查询表单!文本标准Q0B 按c.分组,以确定日期;
我喜欢这个解决方案。我得到了一个错误94-无论是尝试向LoadCalendar传递参数还是不传递参数,都无效地使用Null。但是,将intYear设置为静态2013,并运行LoadCalendar子系统是可行的。不确定是我的系统还是什么,但YearDate对我不起作用。现在正在寻找解决办法。谢谢。啊,渴望,似乎很有效,而且会在一年的变化中发挥作用。再次感谢你!我在LoadCalendar中找不到问题。我不明白为什么YearDate有问题。它将2013作为一个整数给出。是的,我的在调试时在YearDate读取空值,无论发送了什么或没有发送什么。奇怪的是,=Date似乎在我们所有的系统上都返回null。不过,我已经用你的解决方案解决了所有问题,再次感谢你!