好的,我花了最后几个小时搜索和调整我的查询,并尽可能地采取了这个措施 . 我正在使用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中为尚未开始的工作创建条目,但如果必须,我可以 . 我接近这个问题有什么本质上的错误吗?感谢您的帮助/指导!