Как сгруппировать данные по строкам? - PullRequest
0 голосов
/ 26 июня 2019

Мне трудно группировать строки с помощью идентификаторов. У меня есть 3 столбца Data, ID и Location. Я пытаюсь использовать запросы для поиска местоположения и идентификационного номера, чтобы данные отображались для одной конкретной точки данных. Проблема в том, что мои данные в строках, а не в столбцах: моя таблица показана ниже:

    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             

Я попытался использовать два запроса, где я искал идентификатор и местоположение, и некоторые данные появлялись бы передо мной. Проблема в том, что при поиске появляется только одна строка данных. Например: [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 Ответ

1 голос
/ 26 июня 2019

Вы столкнулись с проблемами, потому что ваши данные не соответствуют основным правилам нормализации базы данных - они не имеют структуры и просто представлены в списке, как вы можете использовать в 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 обозначает Внешний ключ ;PK обозначает Первичный ключ .Внешний ключ в предложенной мной таблице 'detail' содержит значение поля первичного ключа ID в таблице 'header'.

Таким образом, вы можете легко создать запрос с получением требуемых результатов, например:

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:]
...