Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql VBA访问日摘要查询_Sql_Excel_Vba_Ms Access_Pivot - Fatal编程技术网

Sql VBA访问日摘要查询

Sql VBA访问日摘要查询,sql,excel,vba,ms-access,pivot,Sql,Excel,Vba,Ms Access,Pivot,我一直使用这个论坛来获取VBA帮助,但这是我第一次自己发布一些东西 我试图制作一份报告,提供Access中存储的各种报警的摘要。我想提供每天每个警报的简单计数。我使用了一些SQL查询,但实际上没有使用任何访问。我认为Access可以从Access本身生成透视表。如果有更好的办法,请告诉我 Set CommandQuery.activeConnection = conn commandQuery.CommandText = _ "TRANSFORM Count(FixAlarms.[Alm_

我一直使用这个论坛来获取VBA帮助,但这是我第一次自己发布一些东西

我试图制作一份报告,提供Access中存储的各种报警的摘要。我想提供每天每个警报的简单计数。我使用了一些SQL查询,但实际上没有使用任何访问。我认为Access可以从Access本身生成透视表。如果有更好的办法,请告诉我

Set CommandQuery.activeConnection = conn
commandQuery.CommandText = _
   "TRANSFORM Count(FixAlarms.[Alm_NativeTimeLast]) AS CountOfAlm_NativeTimeLast " & _
   "SELECT FixAlarms.Alm_Tagname, FixAlarms.Alm_Desc " & _
   "FROM FixAlarms " & _
   "WHERE ((FixAlarms.Alm_Tagname) <> """")) AND FixAlarms.Alm_NativeTimeIn > CellTime " & _
   "GROUP BY FixAlarms.[Alm_Tagname], FixAlarms.Alm_Descr " & _
   "PIVOT Format([Alm_NativeTimeIn],""Short Date"")"
rec.Open commandQuery
如果可以的话,请帮忙


谢谢

为了获取全天的记录,即使是那些你这些天没有活动的记录也需要创建。在access中执行此操作的最简单方法是使用一组UNION语句为以下日期创建一个假表:

SELECT #2015-01-20# as dt FROM dual
UNION ALL
SELECT #2015-01-21# as dt FROM dual
UNION ALL
SELECT #2015-01-22# as dt FROM dual
如果在Access中尝试上述查询,它将不起作用,因为没有名为dual的表。您必须创建它。检查一下这个问题

创建上述查询后,可以将其与源表保持连接

TRANSFORM Count(FixAlarms.[Alm_NativeTimeLast]) AS CountOfAlm_NativeTimeLast 
SELECT FixAlarms.Alm_Tagname, FixAlarms.Alm_Desc 
FROM 
(SELECT #2015-01-20# as dt FROM dual
UNION ALL
SELECT #2015-01-21# as dt FROM dual
UNION ALL
SELECT #2015-01-22# as dt FROM dual) as dates LEFT JOIN
FixAlarms ON DateValue(FixAlarms.[Alm_NativeTimeIn]) = dates.dt
WHERE ((FixAlarms.Alm_Tagname) <> """")) AND FixAlarms.Alm_NativeTimeIn > CellTime 
GROUP BY FixAlarms.[Alm_Tagname], FixAlarms.Alm_Descr 
PIVOT Format(dates.dt, 'Short Date')
在ValueList中使用PIVOT columnName时,ValueList为

括号内 引用 逗号分隔 所以你是

PIVOT Format([Alm_NativeTimeIn],""Short Date"") IN 01/20/15"
需要成为

PIVOT Format([Alm_NativeTimeIn],""Short Date"") IN (""01/20/15"")
尽管如此,这将不会使用语句中的数据透视来过滤记录。您仍然需要使用WHERE子句

如果最终目标是从左到右表示数据,那么这将起作用。但是,将此控件作为报表使用将需要大量额外的工作,因为您的控件不会绑定到可预测的列。列名将因不同的参数而更改


您可以将其作为一个传统的查询,而不进行数据透视,这样可以更轻松地报告它。如果您直接向用户显示网格或导出到Excel,则这不是问题。

因此,我只想在透视表中添加一个标题,告诉我特定列的日期。 代码中没有显示的部分是,我使用rec.getrows将所有数据移动到一个更简单的数组变量中。虽然它拥有Access中的所有数据,但它没有任何标题来通知我什么是标记名、什么是描述以及什么是日期

我发现在fields.itemn下的记录集中有一个Name属性。这个名字告诉我列数据来自何处或数据的日期。通过使用这个和一个简单的daydate函数,我可以制作总结所有警报的月度报告


谢谢你们的帮助,伙计们,但我不是对问题的描述不清楚,就是想得太多了

谢谢你的回答。我不完全明白,既然我已经有一个日期栏要用,为什么我还要再写一个栏。实际上,只要每列都有一个标题,我就可以不使用空白列。然后我可以编写一个宏来放置它们并对它们进行排序。我不明白为什么Access这样做时查询有列名,但当我将其复制到VBA时却没有。可能这是我缺少的某个连接设置?如果没有范围内所有日期的数据,则该数据将不在select语句中。因此,当您转换此select语句时,将不会创建列,从而产生间隙。通过使用左连接,您可以确保至少创建了一行来表示缺少的日期。只需尝试上面的查询,看看它们是否能产生所需的结果
PIVOT Format([Alm_NativeTimeIn],""Short Date"") IN 01/20/15"
PIVOT Format([Alm_NativeTimeIn],""Short Date"") IN (""01/20/15"")