如何按行分组数据?

时间:2019-06-26 17:45:02

标签: excel ms-access access-vba ms-access-2010

我发现使用标识符对行进行分组很困难。我有3列DataIDLocation。我正在尝试使用查询以某种方式搜索位置和ID号,以便针对一个特定数据点显示数据。问题是,我的数据是行而不是列:我的表如下所示:

    Data                    ID  Location

    CONTINGENCY 'AA:P1_AA'   1     X
     DISCONNECT BUS 1        
     DISCONNECT BUS 2        
     DISCONNECT BUS 3        
     DISCONNECT BUS 4        
     DISCONNECT BUS 5        
     DISCONNECT BUS 6        
     DISCONNECT BUS 7        
    END      
    CONTINGENCY 'AB:P1_AB'   2     X
     DISCONNECT BUS 8        
     DISCONNECT BUS 9        
     DISCONNECT BUS 10           
    END      
    CONTINGENCY 'AC:P1_AC'   3     X
     DISCONNECT BUS 11       
     DISCONNECT BUS 12       
     DISCONNECT BUS 13       
    END             

我尝试使用两个查询来搜索ID和位置,并且一些数据会显示在我眼前。问题是当我搜索它时,仅弹出一行数据。 例如: [Please enter Location:]可以说我输入X [Please enter ID #:]可以说我选1

运行Query时访问的输出为: CONTINGENCY 'AB:P1_AB'

我想要的输出是

CONTINGENCY 'AB:P1_AB'      
 DISCONNECT BUS 8        
 DISCONNECT BUS 9        
 DISCONNECT BUS 10           
END

我确实意识到我可以为所有这些数据行键入1和X,但是效率很低。搜索查询时,有什么方法可以将所有这些代码行组合在一起。

FROM Sheet2
WHERE (((Sheet2.Location)=[Please enter Location:]) AND ((Sheet2.ID)=[Please enter ID #:]));```

1 个答案:

答案 0 :(得分:1)

您遇到的问题是因为您的数据不遵循基本的database normalisation rules-它没有结构,并且仅在列表中显示(如您可能在Excel中使用的那样)。

考虑到MS Access可用于无序数据集,因此,除非指定了order by子句,否则您不能依赖查询输出的记录顺序。

对于您的数据集,这意味着没有任何DISCONNECT BUS 1记录与CONTINGENCY 'AA:P1_AA'记录相关。

首先,我建议将您的数据分成两个单独的表:第一个表可能包含'header'信息,例如:

+---------+------------------------+----------+
| ID (PK) |          Data          | Location |
+---------+------------------------+----------+
|       1 | CONTINGENCY 'AA:P1_AA' | X        |
|       2 | CONTINGENCY 'AB:P1_AB' | X        |
|       3 | CONTINGENCY 'AC:P1_AC' | X        |
+---------+------------------------+----------+

第二个(称为'detail')将具有每个'header'记录的内容,并链接到'header'表的主键上,例如:

+---------+----------+-------------------+
| ID (PK) | HID (FK) |       Data        |
+---------+----------+-------------------+
|       1 |        1 | DISCONNECT BUS 1  |
|       2 |        1 | DISCONNECT BUS 2  |
|       3 |        1 | DISCONNECT BUS 3  |
|       4 |        1 | DISCONNECT BUS 4  |
|       5 |        1 | DISCONNECT BUS 5  |
|       6 |        1 | DISCONNECT BUS 6  |
|       7 |        1 | DISCONNECT BUS 7  |
|       8 |        2 | DISCONNECT BUS 8  |
|       9 |        2 | DISCONNECT BUS 9  |
|      10 |        2 | DISCONNECT BUS 10 |
|      11 |        3 | DISCONNECT BUS 11 |
|      12 |        3 | DISCONNECT BUS 12 |
|      13 |        3 | DISCONNECT BUS 13 |
+---------+----------+-------------------+

在这里,FK代表Foreign KeyPK代表Primary Key。我建议的'detail'表中的外键包含'header'表中ID主键字段的值。

这样,您可以轻松创建查询以获取所需的结果,例如:

select header.data, detail.data
from header inner join detail on header.id = detail.hid
where header.id = [Please enter an ID:] and header.location = [Please enter a location:]