Access 中两个任务列表的 SQL 查询 - 如何获得正确的“分配给”?
Posted
技术标签:
【中文标题】Access 中两个任务列表的 SQL 查询 - 如何获得正确的“分配给”?【英文标题】:SQL query on two task lists in Access - how to get the correct “Assigned to”? 【发布时间】:2014-08-21 19:42:28 【问题描述】:大家可能都知道,Sharepoint 任务列表有一个“分配给”列。当我在 Access 中导入任务列表时,我会得到一个列表和另一个表,即“UserInfo”以及该列表的用户(这些用户与 Sharepoint 中该列表的权限下列出的用户相同)。这个UserInfo表有用户的id、title、account、email、department等数据。
当我运行以下查询时:
选择 *
来自第一个列表
联合所有
选择 *
来自第二个列表;
“分配给”字段更改为来自 UserInfo 的人员 ID。他们的名字在 UserInfo 表的“Title”字段下。
我应该如何修改 SQL 查询以将标题放在“分配给”列中?
编辑:这是一个例子
在 FirstList 中,我有一行包含以下值:“Do this”“John Doe”“Not Started”对应于“Title”、“Assigned To”和“Status”列。在 UserInfo 中,我有一行“30”“John Doe”“f2rdf”作为“ID”、“Title”和“Account”的值。
在我进行并集之后,我会看到值 30 而不是 John Doe。那么我如何指定我想查看标题的值,而不是 ID 的值?像 [Assigned To].Title 这样的东西? (不幸的是,这不起作用)
【问题讨论】:
【参考方案1】:Union 查询组合了两个相似的数据集。 Union
的要求是两个集合中的列数相同,并且第一个集合中每一列的数据类型与第二个数据集中匹配列的数据类型相匹配。
根据您对问题的描述,听起来您正在比较两个数据集,这些数据集具有相同的列数和所有相同的数据类型,但您的第二个数据集中的元数据是无序(或不匹配)的你的第一个数据集。
如果您希望FirstList
中的列与SecondList
中的列匹配,那么您需要明确指定顺序,而不是依赖SELECT *
语法。因此,换句话说,如果您的 FirstList
的列是 ColA, ColB, ColC
并且您的 SecondList
中的列是 ColB, ColC, ColA
那么您需要将查询更改为:
SELECT ColA, ColB, ColC
FROM FirstList
UNION ALL
SELECT ColA, ColB, ColC
FROM SecondList;
否则(假设数据类型都相同),您最终可能会在您的ColA
列下拥有ColB
数据,在您的ColB
中拥有ColC
数据等......
【讨论】:
不,你误解了我的问题:假设 ColB 是分配给列。分配给列正在从 UserInfo 表中获取其值。当我查看 FirstList 表时,我可以看到“分配给”列中的名称。但是,在联合之后,我看到了这些名称的 ID。 我用一个例子对我的问题进行了编辑,以便更清楚。 我想你可能误解了联合的工作原理......联合将一组的行结果与第二组的行结果结合起来,并使用在两组中定义的相同元数据结构。因此,根据您的其他信息,查询按预期工作。您是否正在寻找更多加入?因此,您希望您的 SecondList 显示为新列,而不是与 FirstList 在同一行中列出? 是的,我知道工会是如何运作的。这甚至与 SecondList 无关。这是关于联合之后“分配给”列的内容与原始列表中的内容不同的事实。在原始列表中,它包含来自“UserInfo”表的“Title”列的数据。之后,他们从“UserInfo”的“ID”列中获得了数据。 在您的示例中,您只有一个在两组之间匹配的列。如果您只想将这些组合起来,那么您应该只通过显式列出两个语句的 SELECT TITLE 来拉入这些字段。联盟只会将第一列与第一列匹配,将第二列与第二列匹配,等等......它无法判断您的 FirstList 中的 Column1 与您的 SecondList 中的 Column2 相同。请理解,通过在标题旁边添加任何其他字段,您将无法避免组合不同的数据。以上是关于Access 中两个任务列表的 SQL 查询 - 如何获得正确的“分配给”?的主要内容,如果未能解决你的问题,请参考以下文章