Sql 是否在IIF()中嵌套MAX()函数?

Sql 是否在IIF()中嵌套MAX()函数?,sql,ms-access,aggregate-functions,iif,Sql,Ms Access,Aggregate Functions,Iif,我在select语句中嵌套了IIF()函数,每个函数内部都有一个嵌套的MAX()。它似乎希望我将此select语句包含在GROUPBY中。我的问题是: SELECT d2s_loader_performance_tbl.employee_id, IIF(d2s_loader_performance_tbl.wk_ending_dt=max(d2s_loader_performance_tbl.wk_ending_dt),"Last Wk", IIF(d2s_loader_performa

我在select语句中嵌套了
IIF()
函数,每个函数内部都有一个嵌套的
MAX()
。它似乎希望我将此select语句包含在GROUPBY中。我的问题是:

SELECT 
d2s_loader_performance_tbl.employee_id, 
IIF(d2s_loader_performance_tbl.wk_ending_dt=max(d2s_loader_performance_tbl.wk_ending_dt),"Last Wk",
  IIF(d2s_loader_performance_tbl.wk_ending_dt=max(d2s_loader_performance_tbl.wk_ending_dt)-7,"2 Wks Ago",
    IIF(d2s_loader_performance_tbl.wk_ending_dt=max(d2s_loader_performance_tbl.wk_ending_dt)-14,"3 Wks Ago",
      IIF(d2s_loader_performance_tbl.wk_ending_dt=max(d2s_loader_performance_tbl.wk_ending_dt)-21,"4 Wks Ago")))),
d2s_loader_performance_tbl.hrs_worked, 
d2s_loader_performance_tbl.move_count, 
d2s_loader_performance_tbl.moves_per_hour

FROM d2s_loader_performance_tbl
WHERE d2s_loader_performance_tbl.wk_ending_dt In (
SELECT DISTINCT TOP 4 wk_ending_dt 
FROM d2s_loader_performance_tbl
ORDER BY wk_ending_dt DESC)

GROUP BY 
d2s_loader_performance_tbl.employee_id,
d2s_loader_performance_tbl.move_count, 
d2s_loader_performance_tbl.moves_per_hour
当我运行时,会出现以下错误:“您试图执行的查询未将指定表达式[列出嵌套IIFs的区块]作为聚合函数的一部分。当我将其放入GROUP BY(这没有意义)中时,会出现以下错误:“不能在GROUP BY子句中包含聚合函数”

那么access希望我在H-E-double曲棍球棒中做些什么呢?关键是要将一周的结束日期转换为一个相对的术语。该报告每周更新一次,我厌倦了手动查看所有查询和报告,并将引用更改为新的日期


谢谢!

将部分查询放入子选择(甚至可能是单独的查询)如何。如下所示:

SELECT 
  orig.employee_id, 
  IIF(orig.wk_ending_dt=PreAgg.max_wk_ending_dt),"Last Wk",
    IIF(orig.wk_ending_dt=PreAgg.max_wk_ending_dt)-7,"2 Wks Ago",
      IIF(orig.wk_ending_dt=PreAgg.max_wk_ending_dt)-14,"3 Wks Ago",
        IIF(orig.wk_ending_dt=PreAgg.max_wk_ending_dt)-21,"4 Wks Ago")))),
  orig.hrs_worked, 
  orig.move_count, 
  orig.moves_per_hour
FROM (
  SELECT 
  d2s_loader_performance_tbl.employee_id, 
  max(d2s_loader_performance_tbl.wk_ending_dt) AS Max_wk_ending_dt

  FROM d2s_loader_performance_tbl

  GROUP BY 
  d2s_loader_performance_tbl.employee_id
) PreAgg JOIN d2s_loader_performance_tbl AS orig ON
PreAgg.employee_id=orig.employee_id

WHERE orig.wk_ending_dt In (
  SELECT DISTINCT TOP 4 wk_ending_dt 
  FROM d2s_loader_performance_tbl
  ORDER BY wk_ending_dt DESC)

将查询的一部分放入子选择(甚至可能是单独的查询)如何。如下所示:

SELECT 
  orig.employee_id, 
  IIF(orig.wk_ending_dt=PreAgg.max_wk_ending_dt),"Last Wk",
    IIF(orig.wk_ending_dt=PreAgg.max_wk_ending_dt)-7,"2 Wks Ago",
      IIF(orig.wk_ending_dt=PreAgg.max_wk_ending_dt)-14,"3 Wks Ago",
        IIF(orig.wk_ending_dt=PreAgg.max_wk_ending_dt)-21,"4 Wks Ago")))),
  orig.hrs_worked, 
  orig.move_count, 
  orig.moves_per_hour
FROM (
  SELECT 
  d2s_loader_performance_tbl.employee_id, 
  max(d2s_loader_performance_tbl.wk_ending_dt) AS Max_wk_ending_dt

  FROM d2s_loader_performance_tbl

  GROUP BY 
  d2s_loader_performance_tbl.employee_id
) PreAgg JOIN d2s_loader_performance_tbl AS orig ON
PreAgg.employee_id=orig.employee_id

WHERE orig.wk_ending_dt In (
  SELECT DISTINCT TOP 4 wk_ending_dt 
  FROM d2s_loader_performance_tbl
  ORDER BY wk_ending_dt DESC)

日期的格式是什么?当我在“设计”视图中打开表时,数据类型是“日期/时间”,字段属性中的“格式”是空的。选择短日期和长日期之间会有功能上的区别吗?查询向右运行,将12/28/13赋予。然后我尝试以下
选择Max(wk_ending_dt)作为MaxOfwk_ending_dt,Max(wk_ending_dt)-7作为d2s_loader_performance_tbl的MaxOfwk_ending_dt7来测试数学,这也很有效——我得到了两列,12/28/13和12/21/13。日期的格式是什么?当我在设计视图中打开表时,数据类型是“日期/时间”,字段内属性是“格式”“是空白的。选择短日期和长日期之间会有功能上的区别吗?查询运行正确,赠予12/28/13。然后我尝试这个
选择Max(wk_ending_dt)作为MaxOfwk_ending_dt,Max(wk_ending_dt)-7作为d2s_loader_performance_tbl中的MaxOfwk_ending_dt7来测试数学,这同样有效——我得到了两列,12/28/13和12/21/13。经过一些调整后,我得到了你的第一个工作建议,就像我看到你的编辑一样。一个重要的注意事项是在父查询中必须使用WHERE语句。在我看来,子查询中的WHERE限制了对MAX值的选择——这是不必要的,因为无论我选择所有值还是限制为前n个值,MAX值都是相同的。相反,它需要在末尾的WHERE来限制“主拉力”。好建议!对WHERE子句的观点很好。我将纠正它,如上所述。谢谢。经过一些调整,我得到了你的第一个工作建议,正如我看到你的编辑通过。一个重要的注意事项是在父查询中必须使用WHERE语句。在我看来,子查询中的WHERE限制了对MAX值的选择——这是不必要的,因为无论我选择所有值还是限制为前n个值,MAX值都是相同的。相反,它需要在末尾的WHERE来限制“主拉力”。好建议!对WHERE子句的观点很好。我将纠正它,如上所述。谢谢