好的,我花了最后几个小时搜索和调整我的查询,并尽可能地采取了这个措施 . 我正在使用MS Jet在Access数据库上执行查询 . 在最简单的形式中,我有三个项目表(工作单详细信息),任务和一个表格,用于查看特定项目的任务是否已完成 . 前两个表由任务组ID(TGID)链接 . 因此,架构最简单的形式如下:

  • WODetail:ID,TGID

  • 任务:ID,TGID

  • WOTask:ID,WODID,TaskID,完成

我可以通过以下查询提取我需要的数据,而不是我想要的格式:

Select WOD.ID, T.ID, (Select Done From WOTask Where WOTask.WODID = WOD.ID And WOTask.TaskID = T.ID) As Done From WODetail WOD Inner Join Task T On WOD.TGID = T.TGID Where T.TGID = 1 Group By WOD.ID, T.ID

这给出了如下结果:

WOD.ID T.ID Done 
600 3 True 
600 6 False 
600 7 False 
600 8 False 
602 3 True 
602 6 False 
602 7 False 
602 8 False 
607 3 True 
607 6 False
etc

数据是正确的,我想要做的是水平转换(透视,交叉,等等)任务ID,并让完成字段指示每个项目的每个任务的状态,如下所示:

WOD.ID 3 6 7 8  <--- TaskID going horizontally
600 True False False False
602 True False False False
607 True False False False
608 False False False False

我不得不使用子查询来使Done字段正常工作,因为如果任务尚未执行,WOTask中没有条目 . 是的,我尝试过Left Joining WOTask但没有完成Done字段报告 . 这是我与交叉表查询最接近的:

Transform Max(Select Done From WOTask Where WOTask.WODID = WOD.ID And WOTask.TaskID = T.ID) Select WOD.ID From WODetail WOD Inner Join Task T On WOD.TGID = T.TGID Where T.TGID = 1 Group By WOD.ID Pivot T.ID

但是我收到错误:“Microsoft Jet数据库引擎无法将'WOD.ID'识别为有效的字段名称或表达式” . 我假设这是因为在Join之前执行Transform之后的子查询?在子查询上加入Join似乎不合逻辑;我希望它将值与Select语句中的值匹配,就像在原始查询中一样 .

这里有什么建议?除了以编程方式浏览数据之外,我感到很茫然 . 我宁愿不必在WOTask中为尚未开始的工作创建条目,但如果必须,我可以 . 我接近这个问题有什么本质上的错误吗?感谢您的帮助/指导!