按日期显示多个值的数据透视表

Posted

技术标签:

【中文标题】按日期显示多个值的数据透视表【英文标题】:Pivot table with multiple Values by Date 【发布时间】:2017-05-08 16:12:30 【问题描述】:

我想知道是否找到了以下链接中的票证解决方案 Pivot on multiple fields and export from Access.

我正在尝试从以下格式的访问表中获取结果:V1(值 1)是一个数字,V2(值 2)是时间戳hh:mm:ss)。

基本上该报告会提取当月的数据,因此最终该月的每一天都会在顶部有一天,并且每一天都有相应的数字和时间值。

               April 1          April 2          April 3
Manager      V1   V2         V1      V2         V1      V2
John Doe     4   5:43:12      1    0:56:32      2    3:15:12

这是一个经过的时间。我一直在看艾伦布朗的帖子,我认为我的大部分方式都是这样。我创建了两个表:1)V1,这是一个拨号数; 2) V2总通话时间。然后我使用了 Allen Browne 的方法,但我无法将时间格式设为hh:mm:ss。在基表中就是这样,但无论我尝试什么,它似乎总是只显示 1 位数字。

TRANSFORM Sum(IIf([FldName]="DIALS",Val([DIALS].[DIALS]),
              Val(Format([T‌​ALKTIME].[TT],"hh:nn‌​:ss")))) AS TheValue 
SELECT TALKTIME.Manager, DIALS.TW_Program_Code, 
       [DIALS]![VSE_FirstName] & " " & [DIALS]![VSE_Surname_Name] AS REP 
FROM tblXtabColumns, TALKTIME 
INNER JOIN DIALS 
ON (TALKTIME.TW_Program_Code = DIALS.TW_Program_Code) 
AND (TALKTIME.VSE_FirstName = DIALS.VSE_FirstName) 
AND (TALKTIME.VSE_Surname_Name = DIALS.VSE_Surname_Name) 
AND (TALKTIME.Period = DIALS.Period) AND (TALKTIME.[Manager] = DIALS.[Manager])
WHERE (((Month([TALKTIME].[Period])) = Month(Now())-1)) 
GROUP BY TALKTIME.Manager, DIALS.TW_Program_Code, 
         [DIALS]![VSE_FirstName] & " " & [DIALS]![VSE_Surname_Name] 
PIVOT [DIALS].[Period] & " " & [FldName];

【问题讨论】:

你为什么在经过的时间上使用 Val() 函数? Val() 函数的目的是返回一个数字(整数或短整数,没有标点符号和字母)。 我刚刚在谷歌上搜索并尝试了一些东西。老实说,我迷失了。如果我什么都不放,我会收到数据类型不匹配错误 无法对文本值求和。如果经过的时间保存为秒,那么您应该将秒数相加而不格式化为 h:n:s。在所有算术计算完成后进行格式化。不要在那个 Iif() 中格式化。 确实,进行格式化的最佳位置是在表单或报告的文本框中。但是,基于 CROSSTAB 构建稳定的报表并非易事。 是否可以在使用 vba from access 创建每个输出 excel 文件的经过时间列后对其进行格式化?类似的东西 - 在文件夹 Temp 中 - 格式化任何工作簿中的任何列,其中列标题中包含 TT 可能达到这一点:) 【参考方案1】:

是一天中的时间还是经过的时间?

查看http://allenbrowne.com/ser-67.html#MultipleValues。不能有多行标题。日期必须与提供 V1 和 V2 标头的字段连接。是否有一个字段可用于提供“V1”和“V2”标头?如果没有,计算它。一种方式:

SELECT *, DCount("*","Table1","Manager='" & [Manager] & "' AND ID <" & [ID])+1 AS Seq FROM Table1 WHERE Month([datefield]) = 4 AND Year([datefield])=2017;

现在在 CROSSTAB 中使用该查询。要么构建 2 个 CROSSTAB 查询并加入它们,要么使用 Allen Browne 方法。示例 CROSSTAB 仅旋转“V1”数据。

TRANSFORM First(Query1.Reading) AS DailyReading SELECT Query1.Manager FROM Query1 GROUP BY Query1.Manager PIVOT Format([ReadDate],"mmm d") & " : " & [Seq] & "Reading";

【讨论】:

这是一个经过的时间。我一直在看艾伦布朗的帖子,我认为我的大部分方式都是这样。我创建了 2 个表(1 个用于 V1,它是一个拨号数),一个用于 V2(这是总通话时间)然后我使用 Allen Browne 的方法,但我无法获得时间格式为 hh:mm:ss .在基表中就是这样,但无论我尝试什么,它似乎总是只显示 1 位数字。 经过的时间是否在日期/时间字段中?可能使用 Format() 来稳定。格式([字段名],“hh:mm:ss”)。可能应该编辑您的原始帖子以显示那里的 SQL,然后删除两个 cmets。 它被创建为一个短文本字段,这是该字段从秒到 hh:mm:ss 的格式,它最终在一个表中作为短文本 TT: Format(Sum([CUST_TT]) *Val("0.000694444444")/60,"hh:nn:ss") 如果我从初始生成表查询中删除 TT: Format(Sum([CUST_TT])*Val("0.000694444444")/60,"hh:nn:ss") 并将其保留为秒(数据以什么形式出现)查询返回我想要的,除了它将经过的时间显示为秒而不是 hh:mm:ss 格式。 Transform步骤中返回数据的步骤也可以格式化吗? TRANSFORM Sum(IIf([FldName]="DIALS",CDbl([DIALS].[DIALS]),CDbl(([TALKTIME].[CUST_TT])))) AS TheValue 我认为不适合 Allen 的一体化查询方法。

以上是关于按日期显示多个值的数据透视表的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL 我想用日期命名自动建立多个工作表

具有多个聚合值的数据透视表

SQL 动态数据透视表列顺序

如何在多个日期行上透视表[重复]

过滤数据透视表列,仅在

透视具有多个值的表