0

在 MS Access 中寻找以下问题的查询-

以下是我的数据集,其中最后一行在 Value 列中为 NULL。此外,通过对每个 Name+Office+Person+Category 执行 Max(Value),我提取了这些数据以避免多行具有值

ID  Name    Office  Person  Category    Value
1   FMR    Americas Ben       Global    7
1   FMR    London   Ben       Global    5
1   FMR    London   Ben       Overall   4.2
156 Asset  London   Ben       Global    13
156 Asset   London  Ben       Overall   
157  WSR    Paris   Zen       Global      2   

我的预期结果集如下 - 我期待交叉标记或任何指示 ID、姓名、办公室、人员组合具有全局/总体类别值或不在单行中的值。我知道它有点类似于“字符串聚合”

ID  Name    Office  Person  Global  Overall
1   FMR     Americas Ben      X 
1   FMR     London   Ben      X       X
156 Asset   London   Ben      X 
157  WSR    Paris    Zen      X  

感谢您的投入..

4

2 回答 2

0

首先,获取唯一 id/name/office 组合的列表:

SELECT DISTINCT ID, Name, Office, Person
FROM TableName

接下来,为每个类别创建子查询: 对于全局:

SELECT ID, Name, Office, Person
FROM TableName
WHERE Category="Global"

对于整体:

SELECT ID, Name, Office, Person
FROM TableName
WHERE Category="Overall"

最后,将子查询左连接到主查询,并使用表达式显示 X:

SELECT DISTINCT ID, Name, Office, Person
    Iif(Global.ID Is Not Null, "X") AS IsGlobal,
    Iif(Overall.ID Is Not Null, "X") AS IsOverall
FROM (TableName
LEFT JOIN (
    SELECT ID, Name, Office, Person
    FROM TableName
    WHERE Category="Global"
) AS Global 
ON TableName.ID=Global.ID
    AND TableName.Name=Global.Name
    AND TableName.Office=Global.Office
    AND TableName.Person=Global.Person)
LEFT JOIN (
    SELECT ID, Name, Office, Person
    FROM TableName
    WHERE Category="Overall"
) AS Overall
ON TableName.ID=Overall.ID
    AND TableName.Name=Overall.Name
    AND TableName.Office=Overall.Office
    AND TableName.Person=Overall.Person

将子查询另存为 Access 查询并按名称引用已保存的查询,而不是在此查询中包括整个子查询,可能会更容易。

于 2012-10-10T10:03:54.353 回答
0

我玩了一下这个。我创建了两个选择查询全局和总体

全球的

从 [YourTable] WHERE Category="Global" AND 值不为空时,选择 ID、姓名、办公室、人员、类别作为全球

全面的

从 [YourTable] WHERE Category="Overall" AND Value IS NOT NULL 中选择 ID、姓名、办公室、人员、类别作为整体

然后我创建了一个新查询来加入选择查询

选择 g.ID、g.Name、g.Office、g.Person、Global、Overall 从全局 g LEFT JOIN 整体 o ON g.ID = o.ID AND g.Name = o.Name AND g.Office = o。办公室 AND g.Person = o.Person

希望这可以帮助。

于 2012-10-05T16:30:50.910 回答