Как найти минимум в запросе

В языке запросов 1С:Предприятие 8 предусмотрено использование агрегатных функций. Эти функции необходимы, в случаях когда нам нужно вычислить какое-то одиночное значение из набора значений. К примеру, у нас есть некоторый набор чисел (3, 1, 4, 5), с помощью агрегатных функций мы можем их просуммировать, получив число 13, или вычислить минимум – число 1. Все из них имеют аналогичный синтаксис и используются похожим образом.

Сумма

СУММА(ИмяПоля) – суммирует значения колонки (поля). Следует помнить, что суммировать можно только числовые поля. Если поле имеет составной тип данных, содержит не только числовые значения, то функция может быть применена, но в случае появления в выборке нечислового поля, выполнение запроса закончится с ошибкой.

Пример, вычислим общее количество товаров находящееся во всех документах “Поступление товаров и услуг”:

ВЫБРАТЬ 
   СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК ОбщееКоличествоТоваров,

ИЗ

    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары

Минимум

МИНИМУМ(ИмяПоля) – вычисляет минимальное значение колонки (поля).

Максимум

МАКСИМУМ(ИмяПоля) – вычисляет максимальное значение колонки (поля).

Среднее

СРЕДНЕЕ(ИмяПоля) – вычисляет среднее значение колонки (поля).

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

Количество

КОЛИЧЕСТВО(ИмяПоля) – подсчитывает количество значений колонки

КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ИмяПоля) – подсчитывает количество уникальных значений колонки

Примеры

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

ВЫБРАТЬ 
   
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПоступлениеТоваровУслугТовары.Номенклатура) КАК КоличествоРазличныхНоменклатур,
   
СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК ОбщееКоличествоТоваров,
   МИНИМУМ(ПоступлениеТоваровУслугТовары.Сумма) КАК МинимальнаяСуммаПокупки

ИЗ

    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары

Если в выборке пристутствуют поля не использующие агрегатные функции, они обязательно должны быть указаны в секции СГРУППИРОВАТЬ ПО: 

ВЫБРАТЬ 
   ПоступлениеТоваровУслугТовары.Номенклатура
,

   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения)

ИЗ

    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары

СГРУППИРОВАТЬ ПО

    ПоступлениеТоваровУслугТовары.Номенклатура 

В таком случае поля указанные в секции СГРУППИРОВАТЬ будут использованы в качестве разрезов группировки. И значения агрегатных функций будут рассчитаны в разрезе этих группировок. 

К примеру есть следущий набор данных:

Номенклатура Количество
Яблоко 1
Яблоко 3
Апельсин 2
Апельсин 4

Мы используем агрегатную функцию Сумма на колонке “Количество”, чтобы вычислить общее количество товаров

 ВЫБРАТЬ

    ТаблицаТоваров.Номенклатура,

    СУММА(ТаблицаТоваров.Количество) КАК Количество

ИЗ

    ТаблицаТоваров КАК ТаблицаТоваров

СГРУППИРОВАТЬ ПО

    ТаблицаТоваров.Номенклатура 

Так как поле “Номенклатура” так же присутствует в полях выборки мы обязаны указать его в секции группировки. 
В результате мы получим следующий набор данных:

Номенклатура Количество
Яблоко 4
Апельсин 6

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

В случае если же мы хотим узнать общее количество номенклатуры для всего набора данных, мы можем использовать секцию “Итоги”. Подробнее читайте в соотвествующей статье Секция запроса Итоги По.

Стоит отметить, что перечисленные функции также могут использоваться и с оператором ВЫБОР.

Пример, зададим условие на количество товаров, и определим значения поля, если условия выполняются:

ВЫБРАТЬ

    Товары.Номенклатура КАК Номенклатура,

    ВЫБОР

        КОГДА СУММА(Товары.Количество) > 5

            ТОГДА “Нормально”

        ИНАЧЕ “Слишком мало”

    КОНЕЦ КАК ОценкаПокупок

ИЗ

    Документ.ПоступлениеТоваровУслуг.Товары КАК Товары

СГРУППИРОВАТЬ ПО

    Товары.Номенклатура

Результатом может быть такая таблица: 

Номенклатура ОценкаПокупок
Апельсины Слишком мало
Яблоки Слишком мало
Клубника Слишком мало
Салфетки Нормально
Фруктовый сок Слишком мало
Фруктово-ореховая смесь Нормально

Как отобрать минимальные значения в запросе?

Я
   Boudybuilder

11.04.12 – 11:16

На даный момент показывает так :

Номенклатура1  Хароактеристика1         25            Поставщик1

Номенклатура1  Хароактеристика1         30            Поставщик2

Номенклатура1  Хароактеристика1         35            Поставщик3

Надо отобрать с самым меньшим значением по цена:

Номенклатура1  Хароактеристика1         25            Поставщик1

Что в запросе шаманить?

   zak555

1 – 11.04.12 – 11:17

Мин () ?

   Wobland

2 – 11.04.12 – 11:18

сгруппировать по минимуму

   guitar_player

3 – 11.04.12 – 11:18

группировка по Номенклатура1  Хароактеристика1        , минимум по цене. потом соединение с первоначальной таблицей для получения поставщика

   Широкий

4 – 11.04.12 – 11:18

(1)(2) неуд

   Широкий

5 – 11.04.12 – 11:22

1. отсортировать по количеству и выбрать первые 1

2. Запрос условие количество в (Выбрать мин количество)

   qeos

6 – 11.04.12 – 11:25

или

1. сгруппировать по минимуму без поставщика

2. соединить по количеству + поставщик..

   Boudybuilder

7 – 11.04.12 – 11:25

Спасибо(3) !

(3)(5) Два варианта… Который лучше?

   qeos

8 – 11.04.12 – 11:25

(3) черт.. не дочитал ))

   Широкий

9 – 11.04.12 – 11:29

(7)  Мой 🙂 в (7) неверно

   Широкий

10 – 11.04.12 – 11:31

В (5), если не понятно, два варианта решения

   Boudybuilder

11 – 11.04.12 – 11:35

(3)(6) Первую таблицу сделал. А Как соединить?

ВЫБРАТЬ РАЗРЕШЕННЫЕ

   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры,

   МИНИМУМ(ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена) КАК Цена

ИЗ

   РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Период >= &ДатаУстановкиЦен) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних

СГРУППИРОВАТЬ ПО

   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры

АВТОУПОРЯДОЧИВАНИЕ

Первую таблицу сделал…

   Boudybuilder

12 – 11.04.12 – 11:37

ВЫБРАТЬ РАЗРЕШЕННЫЕ

   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры,

   МИНИМУМ(ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена) КАК Цена,

   ЦеныНоменклатурыКонтрагентовСрезПоследних1.ТипЦен

ИЗ

   РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Период >= &ДатаУстановкиЦен) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних

       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних КАК ЦеныНоменклатурыКонтрагентовСрезПоследних1

       ПО ЦеныНоменклатурыКонтрагентовСрезПоследних.Регистратор = ЦеныНоменклатурыКонтрагентовСрезПоследних1.Регистратор

СГРУППИРОВАТЬ ПО

   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры,

   ЦеныНоменклатурыКонтрагентовСрезПоследних1.ТипЦен

АВТОУПОРЯДОЧИВАНИЕ

Чтото так не конает…

   FIXXXL

13 – 11.04.12 – 11:43

(5) если б в базе была одна номенклатура…

   Boudybuilder

14 – 11.04.12 – 11:46

(11)????????

   Широкий

15 – 11.04.12 – 11:46

ВЫБРАТЬ

   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена

ИЗ

   РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Период >= &ДатаУстановкиЦен) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних

ГДЕ

   (ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура, ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена) В

           (ВЫБРАТЬ

               ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,

               МИНИМУМ(ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена) КАК Цена

           ИЗ

               РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Период >= &ДатаУстановкиЦен) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних

           СГРУППИРОВАТЬ ПО

                       ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура)

   FIXXXL

16 – 11.04.12 – 11:50

ВЫБРАТЬ

   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.Регистратор.Контрагент

ИЗ

   (ВЫБРАТЬ

       ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура КАК Номенклатура,

       ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

       МИНИМУМ(ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена) КАК Цена

   ИЗ

       РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&ДатаСреза, ) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних

   
   СГРУППИРОВАТЬ ПО

       ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,

       ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры) КАК ВложенныйЗапрос

       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&ДатаСреза, ) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних

       ПО ВложенныйЗапрос.Номенклатура = ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура

           И ВложенныйЗапрос.ХарактеристикаНоменклатуры = ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры

           И ВложенныйЗапрос.Цена = ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена

   Широкий

17 – 11.04.12 – 11:52

(16) Тоже самое написал 🙂

   FIXXXL

18 – 11.04.12 – 11:59

(17) но твой запрос у меня нифига не кажет 🙁

а мой работает как надо

я давно таким макаром пишу…

   DrHiHi

19 – 11.04.12 – 12:06

(0) не слушай (15)(16), им по 2 бала)))

не учли, то что цена может быть одинаковая у двух поставщиков %))

   DrHiHi

20 – 11.04.12 – 12:08

(19)затупил %))

   Boudybuilder

21 – 11.04.12 – 12:10

(19) И как с этим боремся?

   DimVad

22 – 11.04.12 – 12:16

Ну, Вам нужен список поставщиков с минимальными ценами ? Логично, чтобы выводились все поставщики с одинаковой ценой, если она минимальна. Менеджер будет принимать решение, где покупать. Правда, мне кажется, что предложенные тут варианты запросов какие-то громоздкие…

   DrHiHi

23 – 11.04.12 – 12:19

не учтен пересчет, если в другой валюте приходил товар и не учтена единица измерения))) но если захотеть, то можно реализовать

ВЫБРАТЬ

   ЦеныНоменклатурыКонтрагентовСрезПоследних.ТипЦен.Владелец КАК Контрагент,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.ТипЦен,

   ВложенныйЗапрос.Номенклатура,

   ВложенныйЗапрос.ХарактеристикаНоменклатуры,

   ВложенныйЗапрос.Цена

ИЗ

   (ВЫБРАТЬ

       ВложенныйЗапрос.Номенклатура КАК Номенклатура,

       ВложенныйЗапрос.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

       ВложенныйЗапрос.Цена КАК Цена,

       МАКСИМУМ(ЦеныНоменклатурыКонтрагентовСрезПоследних.Период) КАК Период

   ИЗ

       (ВЫБРАТЬ

           ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура КАК Номенклатура,

           ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

           МИНИМУМ(ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена) КАК Цена

       ИЗ

           РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних КАК ЦеныНоменклатурыКонтрагентовСрезПоследних

       
       СГРУППИРОВАТЬ ПО

           ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,

           ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры) КАК ВложенныйЗапрос

           ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних КАК ЦеныНоменклатурыКонтрагентовСрезПоследних

           ПО ВложенныйЗапрос.Номенклатура = ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура

               И ВложенныйЗапрос.ХарактеристикаНоменклатуры = ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры

               И ВложенныйЗапрос.Цена = ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена

   
   СГРУППИРОВАТЬ ПО

       ВложенныйЗапрос.Номенклатура,

       ВложенныйЗапрос.ХарактеристикаНоменклатуры,

       ВложенныйЗапрос.Цена) КАК ВложенныйЗапрос

       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних КАК ЦеныНоменклатурыКонтрагентовСрезПоследних

       ПО ВложенныйЗапрос.Номенклатура = ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура

           И ВложенныйЗапрос.ХарактеристикаНоменклатуры = ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры

           И ВложенныйЗапрос.Период = ЦеныНоменклатурыКонтрагентовСрезПоследних.Период

           И ВложенныйЗапрос.Цена = ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена

   Boudybuilder

24 – 11.04.12 – 12:20

(22) А что же тогда предложите?

   DimVad

25 – 11.04.12 – 12:34

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

1. Получаем табличку с минимальными ценами по номенклатурам и характеристикам:

ВЫБРАТЬ

   МИНИМУМ(Цены.Цена) КАК Цена,

   Цены.Номенклатура,

   Цены.Характеристика

ПОМЕСТИТЬ МинимальныеЦены

ИЗ

   РегистрСведений.Цены КАК Цены

СГРУППИРОВАТЬ ПО

   Цены.Номенклатура,

   Цены.Характеристика

;

2. Левым соединением выдергиваем всез поставщиков :

ВЫБРАТЬ

   МинимальныеЦены.Цена,

   МинимальныеЦены.Номенклатура,

   МинимальныеЦены.Характеристика,

   Цены.Поставщик

ИЗ

   МинимальныеЦены КАК МинимальныеЦены

       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены

       ПО МинимальныеЦены.Номенклатура = Цены.Номенклатура

           И МинимальныеЦены.Характеристика = Цены.Характеристика

           И МинимальныеЦены.Цена = Цены.Цена

Усе. Если надо, легко сделать так, чтобы запрос выдавал одного поставщика произвольно (если их несколько с одной ценой). Но итоговый запрос – прост как мычание и его легко менять…

   Boudybuilder

26 – 11.04.12 – 13:24

(19) Если цена одинаковая , то показывает две строки. Как их свернуть в одну. ?!

   guitar_player

27 – 11.04.12 – 13:25

(26) я бы строки в запросе пронумеровал а потом с этим делал то, что я вам написал, т.е. привязывался бы не по цене а по ном.,характеристики, номеру строки

   DimVad

28 – 11.04.12 – 13:31

Мне кажется, что лучше ничего не нумеровать… сейчас, пару минут, мне бухи звонят…

   DimVad

29 – 11.04.12 – 13:36

Под “сверткой” понимается – взять любую строку. Ну, самое простое:

ВЫБРАТЬ

   МинимальныеЦены.Цена,

   МинимальныеЦены.Номенклатура,

   МинимальныеЦены.Характеристика,

   МАКСИМУМ(Цены.Поставщик) КАК Поставщик

ИЗ

   МинимальныеЦены КАК МинимальныеЦены

       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены

       ПО МинимальныеЦены.Номенклатура = Цены.Номенклатура

           И МинимальныеЦены.Характеристика = Цены.Характеристика

           И МинимальныеЦены.Цена = Цены.Цена

СГРУППИРОВАТЬ ПО

   МинимальныеЦены.Номенклатура,

   МинимальныеЦены.Характеристика,

   МинимальныеЦены.Цена

   guitar_player

30 – 11.04.12 – 13:38

(29) он сказал, у него цены дублируются, не хватает уник. идентификатора

   DimVad

31 – 11.04.12 – 13:43

Ну да, у него вывелось две строки с одинаковыми Номенклатурой, Характеристикой, Ценой и разными поставщиками. Вот я и предложил группировку по Ном, Хар, и Цене, а поставщ. – любого. Я создал две строки в пробной базе в рег. сведений таком, как он написал в первом посте. Все работает. Т.е. в предыдущем примере – две строки с разными поставщиками, сейчас – все o’k. По крайней мере на той структуре, что ТС описал вначале.

   Boudybuilder

32 – 11.04.12 – 13:46

ВЫБРАТЬ

   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.Регистратор.Контрагент

ИЗ

   (ВЫБРАТЬ

       ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура КАК Номенклатура,

       ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

       МИНИМУМ(ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена) КАК Цена

   ИЗ

       РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Период >= &ДатаУстановкиЦен) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних

   
   СГРУППИРОВАТЬ ПО

       ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,

       ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры) КАК ВложенныйЗапрос

       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Период >= &ДатаУстановкиЦен) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних

       ПО ВложенныйЗапрос.Номенклатура = ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура

           И ВложенныйЗапрос.ХарактеристикаНоменклатуры = ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры

           И ВложенныйЗапрос.Цена = ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена

СГРУППИРОВАТЬ ПО

   ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена,

   ЦеныНоменклатурыКонтрагентовСрезПоследних.Регистратор.Контрагент

Не сворачивает…

  

DrHiHi

33 – 11.04.12 – 13:54

(32) попроюуй 23

В этой статье объясняется, как использовать запрос на набор значений в Access для поиска максимального или минимального значения в наборе записей. Запросы на набор значений используются для ответа на различные деловые вопросы, например о том, какой товар продается хорошо, а какой плохо.

Выберите нужное действие

  • Общие сведения о запросах на набор значений

  • Поиск записей, содержащих наибольшие или наименьшие значения

  • Поиск записей, содержащих наибольшие или наименьшие значения, в группах или категориях

  • Поиск записей, содержащих наибольшие и наименьшие значения

Общие сведения о запросах на набор значений

Запрос на набор значений используется для поиска записей, содержащих наибольшие или наименьшие значения в поле таблицы. Вы можете использовать такие запрос для получения ответов на следующие типы вопросов:

  • Какой товар является наиболее дорогим или наиболее дешевым?

  • У каких трех сотрудников в ближайшее время будет день рождения?

  • Какие отделы лидируют или отстают по продажам в этом году?

  • Какие 5 процентов товаров хуже всего или лучше всего продаются?

  • Какие 5 процентов товаров в каждой из категорий лучше или хуже всего продаются?

Коротко говоря, запрос на набор значений сортирует данные, затем фильтрует их и возвращает наибольшие или наименьшие значения в поле. Вы можете использовать его поиска числовых (в том числе денежных) значений и значений даты.

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

  • Создание запроса на выборку или итогового запроса.

    Запрос на выборку используется для поиска наибольших или наименьших значений в таблице. Итоговый запрос позволяет найти наибольшие или наименьшие значения в одной или нескольких категориях. Например, если вам нужен ответ на вопрос “Какой товар самый дорогой или самый дешевый?”, то следует начать с создания запроса на выборку. Чтобы ответить на вопрос “Какие пять процентов товаров в каждой из категорий лучше или хуже всего продаются?”, используйте итоговый запрос. Кроме того, вы можете использовать любой из них для поиска наибольших или наименьших значений в группе или категории записей.

  • Сортировка запроса.

  • Применение к запросу других условий.

  • Задание числа записей, которые должен возвращать запрос. Вы можете указать процент, например первые 5 процентов значений в поле, или конкретное число, например первые 10 значений в поле.

Выбор между запросом на набор значений и фильтром

Чтобы определить, стоит ли создавать запрос на набор значений или же следует применить фильтр, примите во внимание следующее:

  • Если вы хотите отобрать записи, содержащие наибольшие или наименьшие значения в поле, но точные максимальные и минимальные значения поля не известны или не имеют значения, то следует создать запрос на набор значений.

  • Если вы хотите отобрать все записи, в которых значения поля равны нужному значению либо больше или меньше его, то следует применить фильтр. Например, чтобы отобрать товары с ценой от 50 до 100 ₽, лучше применить фильтр. На рисунке показаны пример фильтра в Конструкторе с запросом и результаты его применения:

    Товары ценой от 50₽ до 100₽

    Дополнительные сведения о создании и использовании фильтров см. в статье “Применение фильтра для просмотра отдельных записей в базе данных Access”.

Правила создания и использования запросов на набор значений

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

Поиск записей, содержащих наибольшие или наименьшие значения

В этом разделе объясняется, как создавать простые и более сложные запросы на набор значений. Сначала описаны основные составляющие запроса на набор значений, а затем показывается, как найти ближайшие дни рождения сотрудников. В качестве примера используется следующая таблица:

Фамилия

Имя

Адрес

Город

Страна или регион

Дата рождения

Дата приема на работу

Авдеев

Григорий

Загородное шоссе, д. 150

Москва

РФ

05-фев-1968

10-июн-1994

Кузнецов

Артем

ул. Гарибальди, д. 170

Пермь

РФ

22-май-1957

22-ноя-1996

Дегтярев

Дмитрий

ул. Кедрова, д. 54

Красноярск

РФ

11-ноя-1960

11-мар-2000

Зуева

Ольга

ул. Губкина, д. 233

Тверь

РФ

22-мар-1964

22-июн-1998

Белых

Николай

пл. Хо Ши Мина, д. 15, кв. 5

Москва

РФ

05-июн-1972

05-янв-2002

Комарова

Лина

ул. Ляпунова, д. 70, кв. 16

Красноярск

РФ

23-янв-1970

23-апр-1999

Зайцев

Сергей

ул. Строителей, д. 150, кв. 78

Омск

РФ

14-апр-1964

14-окт-2004

Ермолаева

Анна

ул. Вавилова, д. 151, кв. 8

Иркутск

РФ

29-окт-1959

29-мар-1997

Зуева

Ольга

ул. Губкина, д. 233

Тверь

РФ

22-мар-1964

20-июн-1998

При этом можно ввести данные из примера вручную или скопировать ее в программу для работы с электронными таблицами, например в Microsoft Excel, а затем импортировать полученный Access.

Примечание: Если у вас нет редактора электронных таблиц, вы можете скопировать пример данных в текстовый редактор, например Блокнот. Дополнительные сведения об импорте текстовых данных см. в статье Импорт данных или связывание с данными текстового файла.

Создание простого запроса на набор значений

  1. На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.

  2. Щелкните таблицу, которую вы хотите использовать в запросе, нажмите кнопку “Добавить”, чтобы разместить таблицу в сетке конструктора, а затем нажмите кнопку “Закрыть”.
    -или-
    Дважды щелкните таблицу.
    Если вы используете пример данных, добавьте в запрос таблицу “Сотрудники”.

  3. Добавьте на бланк поля, которые вы хотите использовать в запросе. Вы можете дважды щелкнуть каждое поле или перетащить его в пустую ячейку в строке Поле.
    Если вы работаете с примером таблицы, то добавьте поля “Фамилия”, “Имя” и “Дата рождения”.

  4. В поле, содержащем наибольшие и наименьшие значения (в нашем примере — поле “Дата рождения”), щелкните строку Сортировка и выберите По возрастанию или По убыванию.
    Если поля значений содержат числа, например цены или объемы продаж, то порядок сортировки По возрастанию возвращает наименьшие значения, а порядок сортировки По убыванию — наибольшие значения. Если поля значений содержат даты, то порядок сортировки По убыванию возвращает самую последнюю дату, а порядок сортировки По возрастанию — самую раннюю дату.

    Важно: Необходимо указать в строке Сортировка значение По возрастанию или По убыванию только для полей, в которых вы ищете наибольшие и наименьшие значения. Если задать порядок сортировки для другого поля (например, поля “НазваниеТовара” вместо поля “Цена”), запрос не будет возвращать требуемые результаты.

  5. На вкладке “Конструктор” в группе “Настройка запроса” щелкните стрелку вниз рядом с кнопкой “Вернуться” (список “Лучшие значения”) и введите число или процент записей, которые вы хотите отобрать, или выберите один из вариантов из списка.

  6. Чтобы выполнить запрос и отобразить результаты в режиме таблицы, нажмите кнопку Выполнить.

  7. Сохраните запрос и оставьте его открытым, чтобы использовать на следующих шагах.

Как вы видите, этот тип запросов на набор значений дает ответы на основные вопросы, например “Кто из сотрудников самый старший или самый молодой?”. Ниже описано, как с помощью выражений и других условий создавать более точные и гибкие запросы. Запрос по описанным ниже условиям выдает ближайшие дни рождения у трех сотрудников.

Добавление условий в запрос

Примечание: В этих инструкциях предполагается, что вы используете запрос, описанный в предыдущем разделе.

  1. Откройте запрос, созданный на предыдущих шагах, в Конструкторе.

  2. В бланке запроса в столбце справа от столбца “Дата рождения”» скопируйте и вставьте или введите выражение Expr1: DatePart(“m”; [Дата рождения]). Функция DatePart извлекает месяц из значения в поле “Дата рождения”.

  3. Справа от столбца, содержащего выражение, скопируйте и вставьте или введите выражение Expr2: DatePart(“d”; [Дата рождения]). В этом случае функция DatePart извлекает день из значения в поле “Дата рождения”.

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

  5. При необходимости вы можете указать условия для ограничения области запроса. При задании условий запрос сортирует только записи, отвечающие им, и определяет наибольшие или наименьшие значения в отсортированном списке.
    В приведенном примере введите или скопируйте и вставьте в строку Условия отбора поля “Дата рождения” следующее выражение:

    Month([Дата рождения]) > Month(Date()) Or Month([Дата рождения])= Month(Date()) And Day([Дата рождения])>Day(Date())

    Это выражение делает следующее: Month([BirthDate]) > Month(Date()) проверяет дату рождения каждого сотрудника, чтобы узнать, приходится ли она на следующий месяц, и, если это так, включает эти записи в запрос. Часть Month([BirthDate])= Month(Date()) And Day([BirthDate])>Day(Date()) в выражении проверяет даты рождения, которые происходят в текущем месяце, чтобы узнать, приходится ли дата рождения на текущую дату или после нее. Если это условие истинно, функция включает эти записи в результаты запроса. В данном выражении не учитываться все записи, в которых дата рождения приходится на период с 1 января до даты выполнения запроса.

    Другие примеры выражений условий для запросов можно найти в статье Примеры условий запроса.

  6. На вкладке “Конструктор” в группе “Настройка запроса” щелкните стрелку вниз рядом с кнопкой “Вернуться” (список “Лучшие значения”) и введите число или процент записей, которые вы хотите отобрать, или выберите один из вариантов из списка.

  7. Чтобы выполнить запрос и отобразить результаты в режиме таблицы, нажмите кнопку Выполнить.

Если запрос возвращает больше записей, чем ожидалось

Если в данных есть записи с одинаковым значением даты, запрос может возвращать больше записей, чем вы ожидали. Например, вы можете создать запрос на набор значений для получения записей о трех сотрудниках, но фактически будет отображено четыре, поскольку у Измайлова и Быкова дни рождения совпадают. Этот тип запроса возвращает все наибольшие значения независимо от того, сколько записей их содержат. Чтобы исключить повторяющиеся значения, можно задать значение Да для свойства Уникальные значения. Сведения об использовании этого свойства см. далее в разделе Если выводятся повторяющиеся записи.

Фамилия

Дата рождения

Жданов

26.09.1968

Селезнев

02.10.1970

Измайлов

15.10.1965

Быков

15.10.1969

Если запрос возвращает меньше записей, чем ожидалось

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

Если выводятся повторяющиеся записи

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

Дата поставки

Продавец

12.11.2004

Иванов

12.11.2004

Воронков

12.10.2004

Попов

12.10.2004

Попов

12.10.2004

Иванов

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

Чтобы избежать отображения повторяющихся записей, можно выполнить одно из двух действий в зависимости от требуемого результата. Вы можете изменить структуру запроса, добавив поля, которые позволят различить записи, например поля “КодЗаказа” и “КодКлиента”. Или, если достаточно показать только одну из повторяющихся записей, вы можете выбрать отображение только уникальных записей, задав значение Да для свойства запроса Уникальные значения. Чтобы настроить это свойство, в Конструкторе нажмите клавишу F4, чтобы отобразить страницу свойств запроса, найдите свойство Уникальные значения и установите для него значение Да.

Дополнительные сведения о работе с повторяюными записями см. в статье “Поиск повторяюных записей с помощью запроса”.

К началу страницы

Поиск записей, содержащих наибольшие или наименьшие значения, в группах или категориях

Чтобы найти наибольшие и наименьшие значения для записей в группах, можно создать итоговый запрос. Помните, что по умолчанию итоговый запрос может включать только поле или поля, содержащие данные, по которым выполняется группировка, например поле “Категории”, а также поля с наибольшими или наименьшими значениями, например поле “Цена”. Итоговые запросы не могут включать другие поля, описывающие значения внутри категории. Однако вы можете создать второй запрос, включающий поля из итогового запроса и поля из других таблиц, содержащие описательные данные.

Например, предположим, что у вас есть таблица товаров, каждый из которых относится к определенной категории, такой как “Настольные игры”, “Головоломки” и т. д. Если вы создаете итоговый запрос для определения наиболее дорогого товара в каждой категории, он может включать только поле или поля, содержащие данные о категории, и поле со сведениями о цене. В нашем примере это поля “Название категории” и “Цена”. При выполнении такого типа запроса Access подставляет префиксы “Максимум_” или “Минимум_” (в зависимости от выбранной функции) в начало названия поля “Цена”:

Название категории

Максимум_Цена

Настольные игры

55,00 ₽

Головоломки

43,90 ₽

Компьютерные игры

263,50 ₽

Куклы

81,00 ₽

Итоговый запрос не может включать другие поля, служащие для описания товара (и упрощающие понимание данных), например названия товаров или названия фирм-поставщиков:

Название категории

Максимум_Цена

Наименование товара

Поставщик

Настольные игры

55,00 ₽

Занимательный C++

Proseware, Inc.

Головоломки

43,90 ₽

Схема реляционной базы данных

Lucerne Publishing

Компьютерные игры

263,50 ₽

Компьютерные маньяки и мифические животные

Корпорация “Софт”

Куклы

81,00 ₽

Игрушечный программист

Contoso, Ltd

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

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

Таблица “Категории”

КодКатегории

Название категории

Описание

1

Настольные игры

Для всех возрастов и уровней навыков

2

Головоломки

Мозаики, ребусы, игрушки-головоломки

3

Компьютерные игры

Для любых консолей и уровней навыков

4

Куклы

Фигурки, куклы

5

Спортивное снаряжение

Мячи, одежда, сетки

6

Модели для сборки

Самолеты, машины, поезда

Таблица “Поставщики”

КодПоставщика

Поставщик

1

Fabrikam

2

Лесопитомник

3

Northwind Traders

4

Adventure Works

5

Lucerne Publishing

6

Proseware, Inc.

7

Contoso, Ltd

8

Wide World Importers

9

Wingtip Toys

10

Wide World Importers

11

Корпорация “Софт”

12

Southridge Video

Таблицы “Товары”

Наименование товара

КодПоставщика

КодКатегории

Цена

Игрушечный программист

7

4

12,95 ₽

Занимательный C++

6

1

15,85 ₽

Схема реляционной базы данных

5

2

22,50 ₽

Волшебная микросхема

3

2

32,65 ₽

Access! Игра!

1

1

22,95 ₽

Компьютерные маньяки и мифические животные

11

3

78,50 ₽

Упражнение для компьютерных мониторов! DVD-диск!

4

5

14,88 ₽

Неуловимая летающая пицца

2

5

36,75 ₽

Внешний дисковод гибких дисков 5.25” (масштаб 1:4)

8

6

65,00 ₽

Игрушечный менеджер

9

4

78,88 ₽

Тьма

12

3

53,33 ₽

Собери клавиатуру

1

6

77,95 ₽

Примечание: Предполагается, что между таблицами “Категории” и “Товары”, а также между таблицами “Поставщики” и “Товары” установлены отношения “один-ко-многим”. В этом случае поля “КодПоставщика” и “КодКатегории” в этих таблицах общие. Если не создать эти отношения, то итоговый запрос, описанный ниже, не будет работать.

Создание итогового запроса

  1. На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.

  2. Выберите нужные таблицы, нажмите кнопку “Добавить”, а затем, завершив добавление таблиц, нажмите кнопку “Закрыть”.
    -или-
    Дважды щелкните каждую из нужных таблиц, а затем нажмите кнопку Закрыть. Каждая таблица отображается в бланке запроса. При использовании таблиц из примера выше добавьте таблицы “Категории” и “Товары”.

  3. Дважды щелкните поля таблицы, которые вы хотите использовать в запросе.
    На данном этапе необходимо удостовериться, что в запрос были добавлены только поля, по которым выполняется группировка, и поля значений. При использовании примера добавьте поле “Название категории” из таблицы “Категории” и поле “Цена” из таблицы “Товары”.

  4. Кроме того, можно указать условие для ограничения области действия запроса.
    Будут отсортированы только записи, соответствующие условиям, а в отсортированном списке будут найдены наибольшие и наименьшие значения. Например, чтобы исключить товары категории “Спортивное снаряжение”, добавьте в строку Условия отбора поля “Название категории” следующее выражение: <>”Спортивное”.
    Другие примеры выражений условий для запросов можно найти в статье Примеры условий запроса.

  5. Преобразуйте запрос в итоговый запрос.

    1. На вкладке Конструктор в группе Показать или скрыть нажмите кнопку Итоги.

      В бланке запроса появится строка Итог.

  6. Убедитесь, что ячейка Итог каждого поля группы содержит значение Группировка, а затем в ячейке Итог того поля, в котором ищутся наибольшие или наименьшие значения, выберите Max или Min.
    Выбор значения Max возвращает наибольшее значение в числовом поле и самую последнюю дату или время в поле даты и времени. Выбор значения Min возвращает наименьшее значение в числовом поле и самую раннюю дату или время в поле даты или времени. В нашем примере выберите в ячейке Итог поля “Название категории” значение Группировка, а в ячейке Итог поля “Цена” — параметр Max или Min.

  7. На вкладке “Конструктор” в группе “Инструменты” убедитесь, что для списка “Возврат” установлено обозначение “Все”, а затем нажмите кнопку “Выполнить”, чтобы выполнить запрос и отобразить результаты в представлении таблицы.

    Примечание: В зависимости от функции, выбранной на шаге 7, Access изменяет имя поля значений в запросе на МаксимумOfИмя Поля или MinOfFieldName. В нашем примере поле будут переименовано в Максимум_Цена или Минимум_Цена.

  8. Сохраните запрос и переходите к следующим шагам.

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

Создание второго запроса для отображения более подробных данных

  1. На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.

  2. Перейдите на вкладку “Запросы”, а затем дважды щелкните итоговую таблицу, созданную в предыдущем разделе.

  3. Откройте вкладку Таблицы и добавьте таблицы, которые использовались в итоговом запросе, и любые таблицы, содержащие другие связанные данные, которые вы хотите отобразить.
    В нашем примере добавьте в новый запрос таблицы “Категории”, “Товары” и “Поставщики”.

  4. Свяжите поля в итоговом запросе с соответствующими полями в родительских таблицах. Для этого перетащите каждое поле из итогового запроса на соответствующее поле в таблице.

    В описанном примере перетащите поле имя “Название категории” из итогового запроса на поле “Название категории” в таблице “Категории”. Затем перетащите поле “Максимум_Цена” из итогового запроса на поле “Цена” в таблице “Товары”. Благодаря объединению новый запрос на выборку связывает данные из итогового запроса с данными из других таблиц.

  5. В окне итогового запроса дважды щелкните звездочку (*), чтобы добавить запрос целиком в бланк, а затем перетащите дополнительные поля из других таблиц запроса.

    В нашем примере дважды щелкните итоговый запрос, созданный в предыдущем разделе, а затем добавьте поля “Наименование товара” и “Поставщик” из таблиц “Товары” и “Поставщики” соответственно.

  6. При необходимости вы можете задать порядок сортировки для одного или нескольких столбцов.
    Например, чтобы вывести список категорий в алфавитном порядке, выберите в ячейке Сортировка столбца “Название категории” значение По возрастанию.

  7. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

    Запрос будет выполнен, а его результаты выведутся в режиме таблицы.

Совет: Если вам не нравится, что заголовок столбца “Цена” называется Максимум_Цена или Минимум_Цена, то откройте запрос в Конструкторе и в столбце “Цена” в бланке запроса введите Цена: Максимум_Цена или Цена: Минимум_Цена. После этого в заголовке столбца в режиме таблицы будет выводиться название Цена.

К началу страницы

Поиск записей, содержащих наибольшие и наименьшие значения

Запросы, созданные ранее в этой статье, возвращают либо наибольшие, либо наименьшие значения, но не оба набора сразу. Если вы хотите отобразить оба набора значений в одном представлении, следует создать два запроса (один для получения наибольших значений и другой для получения наименьших значений), а затем объединить и сохранить результаты в одной таблице.

Поиск наибольших и наименьших значений и отображение этих данных в таблице состоит из следующих основных этапов:

  • Создание запроса на поиск наибольших значений и запроса на поиск наименьших значений или, при необходимости группировки данных, создание итоговых запросов, использующих функции Min и Max.

  • Преобразование запроса на поиск наибольших значений (или итогового запроса на поиск максимальных значений) в запрос на создание таблицы и выполнение этого запроса для создания таблицы.

  • Преобразование запроса на поиск наименьших значений (или итогового запроса на поиск минимальных значений) в запрос на добавление для добавления записей в таблицу наибольших значений.

    Ниже описан процесс создания такого запроса.

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

    Включение содержимого базы данных

    • Нажмите на панели сообщений кнопку Включить содержимое.

    • Выполните запрос еще раз.

  • Создайте запросы на поиск наибольших и наименьших значений.

    Шаги, необходимые для создания запроса на поиск наибольших или наименьших значения, описаны выше в разделе Поиск записей, содержащих наибольшие или наименьшие значения. Если нужно сгруппировать записи по категориям, обратитесь к разделу Поиск записей, содержащих наибольшие или наименьшие значения, в группах или категориях.

  • Сохраните каждый запрос и оставьте его открытым, чтобы использовать на следующих шагах.

Создание запроса на создание таблицы

  1. В запросе на поиск наибольших значений, открытом в Конструкторе:

    На вкладке Конструктор в группе Тип запроса нажмите кнопку Создание таблицы.
    Откроется диалоговое окно Создание таблицы.

  2. В поле Имя таблицы введите имя таблицы, которая будет хранить записи с наибольшими и наименьшими значениями. Например, введите Наибольшие и наименьшие значения, а затем нажмите кнопку ОК.
    Каждый раз при выполнении запроса вместо отображения результатов в режиме таблицы запрос будет создавать таблицу и замещать значения текущими данными.

  3. Сохраните и закройте запрос.

Создание запроса на добавление

  1. Откройте запрос на поиск наименьших значений в Конструкторе.

  2. На вкладке Разработка в группе Тип запроса выберите команду Добавить.

  3. В диалоговом окне Добавление введите то же имя, что было указано в диалоговом окне Создание таблицы.
    Например, введите Наибольшие и наименьшие значения, а затем нажмите кнопку ОК. Каждый раз при выполнении запроса вместо отображения результатов в режиме таблицы он будет добавлять записи в таблицу “Наибольшие и наименьшие значения”.

  4. Сохраните и закройте запрос.

Выполнение запросов

Теперь вы готовы запустить оба запроса.

  • В области навигации дважды щелкните запрос на верхнее значение и нажмите кнопку “Да” в сообщениях.

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

  • Откройте таблицу с набором записей в режиме таблицы.

К началу страницы

Минимальное, максимальное, среднее значение в запросе

Автор 2С, 01 окт 2014, 12:44

0 Пользователей и 1 гость просматривают эту тему.

Доброго времени суток! Делаю отчет и возникли небольшие трудности с построением запроса.

Запрос.Текст=“ВЫБРАТЬ    
                       |МИНИМУМ(ЕСТЬNULL(СопряжениеТаблицаВалюты.Ставка,0)) КАК СтавкаМинимум,
                       |МАКСИМУМ(ЕСТЬNULL(СопряжениеТаблицаВалюты.Ставка,0)) КАК СтавкаМаксимум,
                       |СРЕДНЕЕ(ЕСТЬNULL(СопряжениеТаблицаВалюты.Ставка,0)) КАК СтавкаСредняя,
                       |   СопряжениеТаблицаВалюты.Касса,
                       |   ТиповойОстаткиИОбороты.Валюта КАК Валюта
                       |ИЗ
                       |   Документ. Сопряжение.ТаблицаВалюты КАК СопряжениеТаблицаВалюты

Выдается ошибка: “Поле не входит в группу СопряжениеТаблицаВалюты.Касса”. Убирал эту строчку, выскакивает следующая, ясно, что неверно прописал мин, макс и среднее значение . Подскажите, как исправить, пожалуйста.


ну так вы окончание запроса приведите…

Получил помощь – скажи СПАСИБО.
Разобрался сам – расскажи другим.


Доброго дня. Попробуйте так:


ВЫБРАТЬ   
   МИНИМУМ(ЕСТЬNULL(СопряжениеТаблицаВалюты.Ставка,0)) КАК СтавкаМинимум,
   МАКСИМУМ(ЕСТЬNULL(СопряжениеТаблицаВалюты.Ставка,0)) КАК СтавкаМаксимум,
   СРЕДНЕЕ(ЕСТЬNULL(СопряжениеТаблицаВалюты.Ставка,0)) КАК СтавкаСредняя,
   СопряжениеТаблицаВалюты.Касса,
   ТиповойОстаткиИОбороты.Валюта КАК Валюта
                       ИЗ
                          Документ. Сопряжение.ТаблицаВалюты КАК СопряжениеТаблицаВалюты
СГРУППИРОВАТЬ ПО
    СопряжениеТаблицаВалюты.Касса,
    ТиповойОстаткиИОбороты.Валюта КАК Валюта

Пример СГРУППИРОВАТЬ

Онлайн Больница |

ЭЭГ: проведение электроэнцефалограммы в клинике

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

ЭЭГ: проведение электроэнцефалограммы в клинике Читать полностью »


Цитата: kolil от 02 окт 2014, 13:32
Доброго дня. Попробуйте так:

ВЫБРАТЬ   
   МИНИМУМ(ЕСТЬNULL(СопряжениеТаблицаВалюты.Ставка,0)) КАК СтавкаМинимум,
   МАКСИМУМ(ЕСТЬNULL(СопряжениеТаблицаВалюты.Ставка,0)) КАК СтавкаМаксимум,
   СРЕДНЕЕ(ЕСТЬNULL(СопряжениеТаблицаВалюты.Ставка,0)) КАК СтавкаСредняя,
   СопряжениеТаблицаВалюты.Касса,
   ТиповойОстаткиИОбороты.Валюта КАК Валюта
                       ИЗ
                          Документ. Сопряжение.ТаблицаВалюты КАК СопряжениеТаблицаВалюты
СГРУППИРОВАТЬ ПО
    СопряжениеТаблицаВалюты.Касса,
    ТиповойОстаткиИОбороты.Валюта КАК Валюта

Пример СГРУППИРОВАТЬ

Спасибо большое за помощь, группировка дала положительные результаты.


, так в первом вашем сообщении это был ВЕСЬ текст запроса?!
ну ну…

Получил помощь – скажи СПАСИБО.
Разобрался сам – расскажи другим.


Цитата: cska-fanat-kz от 02 окт 2014, 14:24
, так в первом вашем сообщении это был ВЕСЬ текст запроса?!
ну ну…

Естественно нет: не стал кидать весь, т.к. подумал, возможно ошибочно, что он не понадобится. В любом случае, вопрос решен группировкой, Вам тоже спасибо за помощь и активное участие.



Описание

Примеры использования группировки в запросе 1С. Простая группировка, условие после группировки и др.

Запросы. Группировка записей

Оглавление (нажмите, чтобы раскрыть)

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

Пример выбора общего и различного количества записей в запросе 1С

//По каждому сотруднику получаем общее количество
//записей и количество видов расчета в регистре "Начисления"

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ 
    |   Сотрудник.Наименование КАК ФИО,
    |   КОЛИЧЕСТВО(*) Количество,
    |   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВидРасчета) КАК КоличествоВидовРасчета
    |ИЗ
    |   РегистрРасчета.Начисления
    |
    |СГРУППИРОВАТЬ ПО
    |   Сотрудник";

 Выборка = Запрос.Выполнить().Выбрать();

 Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.ФИО + ": " + Выборка.Количество +
        ", " + Выборка.КоличествоВидовРасчета);
КонецЦикла;

Минимальное, максимальное и среднее значения

Пример выбора минимального, максимального и среднего значения в запросе 1С

//Получаем масимальное, минимальное и среднее
//начисление по каждому виду расчета

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ 
    |   ВидРасчета,
    |   МИНИМУМ(Результат) КАК Мин,
    |   МАКСИМУМ(Результат) КАК Макс,
    |   СРЕДНЕЕ(Результат) КАК Сред
    |ИЗ
    |   РегистрРасчета.Начисления
    |
    |СГРУППИРОВАТЬ ПО
    |   ВидРасчета";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Сообщить("" + Выборка.ВидРасчета + ": " +
        Выборка.Мин + ", " + Выборка.Макс + ", " +
         Выборка.Сред);
КонецЦикла;

Простая группировка

Пример использования простой группировки в запросе 1С

//Получаем итоговые суммы по каждому виду расчета

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ 
    |   ВидРасчета,
    |   СУММА(Результат) КАК Результат
    |ИЗ
    |   РегистрРасчета.Начисления
    |
    |СГРУППИРОВАТЬ ПО
    |   ВидРасчета";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Сообщить("" + Выборка.ВидРасчета + ": " +
        Выборка.Результат);
КонецЦикла;

Условие после группировки

Пример задания условия после группировки в запросе 1С

//По каждому сотруднику получаем количество видов расчета в регистре "Начисления"
//Затем выводим только записи, у которых количество различных видов расчета больше 2

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ 
    |   Сотрудник.Наименование КАК ФИО,
    |   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВидРасчета) КАК Количество
    |ИЗ
    |   РегистрРасчета.Начисления
    |
    |СГРУППИРОВАТЬ ПО
    |   Сотрудник
    |ИМЕЮЩИЕ 
    |   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВидРасчета) > 2";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.ФИО + ": " + Выборка.Количество);
КонецЦикла;

Ключи: 1С | Запросы

Добавить комментарий