Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб_методичка.doc
Скачиваний:
9
Добавлен:
09.11.2019
Размер:
542.21 Кб
Скачать

4.7.4.3. Запрос на обновление (корректировку) данных

Создание запроса:

  • создать запрос на выборку данных

  • преобразовать запрос на выборку в запрос на обновление данных:

Запрос/Обновление

На бланке запроса появится строка Обновление, в которой нужно указать новое значение обновляемого поля.

Пример 9. Однотабличный SQL-запрос на обновление

поля город в таблице Поставщики. Новое и старое значения поля город вводить в диалоге (параметрический запрос):

UPDATE Поставщики SET Поставщики.город = [Введите новый город]

WHERE ((Поставщики.город=[Введите старый город]));

4.7.5. Группирование данных в запросе

Группирование данных позволяет получать статистическую, итоговую и др. информацию по отдельным группам данных. Группировать данные можно по одному или нескольким полям. При этом в одну группу включаются данные с одинаковыми значениями в поле группирования. Например, все записи, сгруппированные по номеру поставщика, образуют столько групп, сколько имеется разных значений в поле номер поставщика.

При работе с группами данных в бланк запроса нужно добавить строку Групповая операция:

Вид/Групповые операции или кн. Групповые операции на ПИ или из к.з. меню , открытого в нижней части бланка запроса.

Для каждого поля в строке Групповая операция может быть выбрано:

Группировка - означает, что данное поле является полем группирования (устанавливается по умолчанию)

Sum - суммирование всех значений поля по группе данных

Avg - среднее значение поля по группе

Min или Max - минимальное или максимальное значение поля в группе

Count - количество записей, входящих в группу

StDev -среднеквадратическое отклонение

Var - дисперсия

First или Last - первое или последнее значение поля в группе

Выражение - позволяет ввести выражение вместо имени поля в строке Поле бланка запроса

Условие - показывает, что это поле используется только для задания условия отбора данных в запросе . Это поле не отображается в динамическом наборе данных.

Если группировка производится по нескольким полям , то слово Группировка должно быть в каждом из них.

Пример 10. Группирование данных по одному полю. Однотабличный запрос

Сгруппировать данные по полю номерп в таблице Поставки и вычислить

количество записей в каждой группе и суммарное количество поставляемых деталей для каждой группы поставщиков.

Создание QBE - запроса:

  • создать запрос на выборку данных из таблицы Поставки, отобразив в динамическом наборе поля: номерп, номерд, количество.

  • добавить в бланк запроса строку Групповые операции

  • отобразить в этой строке для каждого из перечисленных выше полей значения: Группировка для поля номерп, Count для поля номерд, Sum для поля количество.

Однотабличный SQL - запрос:

SELECT Поставки.номерп, Count(Поставки.номерд) AS Count_номерд, Sum(Поставки.количество) AS Sum_количество

FROM Поставки

GROUP BY Поставки.номерп;

Имена полей можно изменить, отредактировав запрос в окне SQL, например так:

SELECT Поставки.номерп AS [номер поставщика],

Count(Поставки.номерд)  AS [количество записей], Sum(Поставки.количество)  AS [суммарное количество]

FROM Поставки

GROUP BY Поставки.номерп;

Исполнив запрос, получим следующий динамический набор данных:

Номер поставщика

количество записей

суммарное количество

1

3

270

2

2

350

3

2

250

4

1

50


Пример 11. Группирование данных по двум полям. Однотабличный запрос

из таблицы Поставщики сначала по полю номерп, затем по полю статус, а для поля город используем функцию Count.

Соответствующий однотабличный SQL - запрос:

SELECT  Поставщики.имяп, Поставщики.статус, Сount(Поставщики.город) AS [количество записей]

FROM Поставщики

GROUP BY Поставщики.имяп, Поставщики.статус;

Исполнив запрос, получим следующий динамический набор данных:

имяп

статус

количество записей

Иванов

80

2

Иванов

100

1

Петров

100

1

Сидоров

80

1


Пример 12. Группирование данных по одному полю. Многотабличный запрос

SELECT Поставки.номерд, First(Детали.имяд) AS [имя детали], Count(Поставки.номерп) AS [кол поставщиков], Sum([Детали]![цена]) AS [сум цена], Sum([Поставки]![количество]) AS [сум кол деталей], Sum([Детали]![цена]*[Поставки]![количество]) AS [общая стоимость]

FROM Детали INNER JOIN Поставки ON Детали.номерд = Поставки.номерд

GROUP BY Поставки.номерд;

НомерДет

First_dim

кол поставщиков

сум цена

сум кол деталей

общая стоимость

1

гайка

2

200,00 р.

200

20 000,00 р.

2

болт

3

450,00 р.

350

52 500,00 р.

3

шайба

2

100,00 р.

350

17 500,00 р.

4

гайка

1

200,00 р.

20

4 000,00 р.