我发现使用标识符对行进行分组很困难。我有3列Data
,ID
和Location
。我正在尝试使用查询以某种方式搜索位置和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 #:]));```
答案 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 Key; PK
代表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:]