|
КОЛИЧЕСТВО в запросах | ☑ | ||
---|---|---|---|---|
0
only82
23.08.11
✎
23:22
|
При использовании в запросе функции КОЛИЧЕСТВО выбираются только те записи, где количество > 0, даже если стоит условие >=. Как выбрать все записи, в т.ч. где количество 0? Пробовал использовать ЕСТЬNULL(ВложенныйЗапрос.Количество, 0) - результат тот же.
Вот пример запроса: ВЫБРАТЬ ЕСТЬNULL(ВложенныйЗапрос.Количество, 0) КАК Количество, ВложенныйЗапрос.НаселенныйПункт, ВложенныйЗапрос.Район ИЗ (ВЫБРАТЬ КОЛИЧЕСТВО(ФизическиеЛица.Индекс) КАК Количество, ФизическиеЛица.НаселенныйПункт КАК НаселенныйПункт, ФизическиеЛица.НаселенныйПункт.Район КАК Район ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ГДЕ ФизическиеЛица.Улица = &Улица СГРУППИРОВАТЬ ПО ФизическиеЛица.НаселенныйПункт.Район, ФизическиеЛица.НаселенныйПункт) КАК ВложенныйЗапрос ГДЕ ВложенныйЗапрос.Количество >= &Количество |
|||
1
Realist_x1
23.08.11
✎
23:25
|
Потому что Количество используете во вложенном запросе, а условие в основном.
|
|||
2
Sereja
23.08.11
✎
23:25
|
(0) Без вложенного запроса, делай "правое соеднинение" со справочником ФизическиеЛица
|
|||
3
GROOVY
23.08.11
✎
23:26
|
Функция "количество" не может вернуть 0. В принципе.
|
|||
4
only82
23.08.11
✎
23:26
|
я не могу использовать условие во вложенном запросе. потому что еще не прошла группировка
|
|||
5
only82
23.08.11
✎
23:28
|
по поводу правого соединения. не очень представляю как его применить в данном случае
|
|||
6
Sereja
23.08.11
✎
23:30
|
(5) У тебя есть вкладочка в конструкторе запроса, называется связи, добавляй туда 2 таблицы, Регистра и Справочник. Соединяй по ключевым полям. Попробуй. левое, правое, полное, ощути разницу.
|
|||
7
Икогнито
23.08.11
✎
23:30
|
Вместо ГДЕ напиши ИМЕЮЩИЕ и будет тебю счастье
|
|||
8
ilkoder
23.08.11
✎
23:31
|
Вложенный запрос - это зло, строй временные таблицы и соединяй их как тебе надо.
|
|||
9
Икогнито
23.08.11
✎
23:32
|
+(7) и запрос перепиши
|
|||
10
only82
23.08.11
✎
23:34
|
поменял ГДЕ на ИМЕЮЩИЕ. выдает ошибку "поле не входит в группу"
|
|||
11
Икогнито
23.08.11
✎
23:36
|
(10) ну дык с умом надо менять.
В конструкторе функцию добавь она сама грамотно тебе ИМЕЮЩИЕ пропишет |
|||
12
only82
23.08.11
✎
23:36
|
(8) В моем случае сложно обойтись без вложенных запросов, потому что полный запрос выглядит так:
ВЫБРАТЬ БезУлиц.НаселенныйПункт, БезУлиц.Количество КАК КоличествоБезУлиц, СУлицами.Количество КАК КоличествоСУлицами ИЗ (ВЫБРАТЬ ЕСТЬNULL(ВложенныйЗапрос.Количество, 0) КАК Количество, ВложенныйЗапрос.НаселенныйПункт КАК НаселенныйПункт, ВложенныйЗапрос.Район КАК Район ИЗ (ВЫБРАТЬ КОЛИЧЕСТВО(ФизическиеЛица.Индекс) КАК Количество, ФизическиеЛица.НаселенныйПункт КАК НаселенныйПункт, ФизическиеЛица.НаселенныйПункт.Район КАК Район ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ГДЕ ФизическиеЛица.Улица = &Улица СГРУППИРОВАТЬ ПО ФизическиеЛица.НаселенныйПункт.Район, ФизическиеЛица.НаселенныйПункт) КАК ВложенныйЗапрос ГДЕ ВложенныйЗапрос.Количество >= &КоличествоБезУлиц) КАК БезУлиц ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЕСТЬNULL(ВложенныйЗапрос.Количество, 0) КАК Количество, ВложенныйЗапрос.НаселенныйПункт КАК НаселенныйПункт, ВложенныйЗапрос.Район КАК Район ИЗ (ВЫБРАТЬ КОЛИЧЕСТВО(ФизическиеЛица.Индекс) КАК Количество, ФизическиеЛица.НаселенныйПункт КАК НаселенныйПункт, ФизическиеЛица.НаселенныйПункт.Район КАК Район ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ГДЕ ФизическиеЛица.Улица <> &Улица СГРУППИРОВАТЬ ПО ФизическиеЛица.НаселенныйПункт.Район, ФизическиеЛица.НаселенныйПункт) КАК ВложенныйЗапрос ГДЕ ВложенныйЗапрос.Количество >= &КоличествоСУлицами) КАК СУлицами ПО БезУлиц.НаселенныйПункт = СУлицами.НаселенныйПункт |
|||
13
Икогнито
23.08.11
✎
23:38
|
На вскидку, это удалить:
СГРУППИРОВАТЬ ПО ФизическиеЛица.НаселенныйПункт.Район, ФизическиеЛица.НаселенныйПункт Вместо ГДЕ написать ИМЕЮЩИЕ Сумма(ЕСТЬNULL(ВложенныйЗапрос.Количество, 0)) > &ТвойПарамытыр |
|||
14
ilkoder
23.08.11
✎
23:38
|
Засунь "имеющие" во вложенные запросы, хотя временными таблицами и проще и понятнее...
|
|||
15
Икогнито
23.08.11
✎
23:40
|
Короче, отымел автора запрос, надо через ИМЕЮЩИЕ делать :)
|
|||
16
GROOVY
23.08.11
✎
23:41
|
(6) где там регистр?
(8) ты в курсе что временные табдицы физически создаются? Как дуешь вложенный запрос делает физическую запись в таблицах БД? ВЫБРАТЬ КОЛИЧЕСТВО(ФизическиеЛица.Индекс) КАК Количество, ФизическиеЛица.НаселенныйПункт КАК НаселенныйПункт, ФизическиеЛица.НаселенныйПункт.Район КАК Район ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ГДЕ ФизическиеЛица.Улица = &Улица СГРУППИРОВАТЬ ПО ФизическиеЛица.НаселенныйПункт.Район, ФизическиеЛица.НаселенныйПункт ИМЕЮЩИЕ КОЛИЧЕСТВО(ФизическиеЛица.Индекс) >= &количество Но нулевые так тоже не выведет. |
|||
17
only82
24.08.11
✎
00:37
|
(13) Какой смысл менять ГДЕ на ИМЕЮЩИЕ в основном запросе если вложенный запрос уже дает выборку без 0?
|
|||
18
only82
24.08.11
✎
01:06
|
Я изначально неправильно сформулировал задачу.
У меня есть 3 справочника: "НаселенныеПункты", "Улицы", и "ФизическиеЛица с реквизитами НаселенныйПункт и Улица". Нужно сделать выборку всех населенных пунктов где есть ФизическиеЛица с ФизическиеЛица.Улица=Справочник.Улицы.ПустаяСсылка и ФизическиеЛица.Улица<>Справочник.Улицы.ПустаяСсылка. Это я реализовал с помощю запроса (12). Теперь мне нежно сделать так чтобы я мог указывать КоличествоФизЛицБезУлиц >=0 и при этом бы выбирались все населенные пункты где количество жителей без улиц >=0 |
|||
19
kuza2000
24.08.11
✎
02:11
|
Не совсем понял задачу. Нужен перечень населенных пунктов, или их количество? Или количество лиц без улиц в разрезе населенных пунктов?
Перечень населенных пунктов, где есть хотя бы один житель без улицы как-то так: ВЫБРАТЬ РАЗЛИЧНЫЕ НаселенныйПункт.Ссылка ИЗ ФизЛица СОЕДИНЕНИЕ НаселенныеПункты ПО ФизЛица.НаселенныйПункт = НаселенныеПункты.Ссылка И ФизЛица.Улица = Справочник.Улицы.ПустаяСсылка Количество таких населенных пунктов то же самое, только начинается на: ВЫБРАТЬ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ НаселенныйПункт.Ссылка) Количество физлиц без улиц, в разрезе населенных пунктов как-то так: ВЫБРАТЬ РАЗЛИЧНЫЕ НаселенныйПункт.Ссылка, КОЛИЧЕСТВО(*) ИЗ ФизЛица СОЕДИНЕНИЕ НаселенныеПункты ПО ФизЛица.НаселенныйПункт = НаселенныеПункты.Ссылка И ФизЛица.Улица = Справочник.Улицы.ПустаяСсылка СГРУППИРОВАТЬ ПО НаселенныйПункт.Ссылка Что-нибудь подходит? |
|||
20
only82
24.08.11
✎
14:26
|
(19) Нет. Это немного не то. Мне в результате нужно получить таблицу с тремя полями "Населенный пункт", "количество жителей с улицами" и "количество жителей без улицы". Я задаю параметры "количество жителей с улицами" >= 1000 и "количество жителей без улицы" >= 20 и получаю выборку всех больших сел в которых есть улицы и в которых есть жители с незаполнеными "улицами". Вопрос: Как мне в этом же отчете получать данные с такими параметрами параметры "количество жителей с улицами" >= 1000 и "количество жителей без улицы" >= 0? Мне выдает только те где ">0" а не ">=0".
|
|||
21
kuza2000
24.08.11
✎
14:36
|
Вариант1
ВЫБРАТЬ НаселенныеПункты.Ссылка, СУММА(ВЫБОР КОГДА ФизЛица.Улица = Справочник.Улицы.ПустаяСсылка ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) КолВоБезУлиц, СУММА(ВЫБОР КОГДА ФизЛица.Улица = Справочник.Улицы.ПустаяСсылка ТОГДА 0 ИНАЧЕ 1 КОНЕЦ) КолВоСУлицами, ИЗ НаселенныеПункты СОЕДИНЕНИЕ ФизЛица ПО ФизЛица.НаселенныйПункт = НаселенныеПункты.Ссылка ИМЕЮЩИЕ СУММА(ВЫБОР КОГДА ФизЛица.Улица = Справочник.Улицы.ПустаяСсылка ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) >= &КолВоБезУлиц И СУММА(ВЫБОР КОГДА ФизЛица.Улица = Справочник.Улицы.ПустаяСсылка ТОГДА 0 ИНАЧЕ 1 КОНЕЦ) > КолВоСУлицами Вариант2 К пунктам присоединяем (левое) жителей два раза, один раз с улицами, второй раз без и считаем КОЛИЧЕСТВО(ФизЛицаСУлицами.Ссылка) И КОЛИЧЕСТВО(ФизЛицаБезУлиц.Ссылка). В некоторых случаях этот вариант может оказаться быстрее. |
|||
22
Axel2009
24.08.11
✎
14:48
|
если улицы нет в выборке то откуда взяться строке? нужно откудато эту строку забрать.
|
|||
23
kuza2000
24.08.11
✎
14:52
|
(22) Не понял вопрос. Это про 1-й вариант, или 2-й? Здесь вроде улицы вообще не фигурируют, это просто условие...
|
|||
24
Axel2009
24.08.11
✎
14:52
|
(23) КОЛИЧЕСТВО(*) = 0 подразумевает что записи НЕТУ. откуда взяться этой строке?
|
|||
25
only82
24.08.11
✎
14:56
|
Вот так решил проблему:
ВЫБРАТЬ ВложенныйЗапрос.НаселенныйПункт, ВложенныйЗапрос.КоличествоБезУлиц, ВложенныйЗапрос.КоличествоСУлицами ИЗ (ВЫБРАТЬ БезУлиц.НаселенныйПункт КАК НаселенныйПункт, БезУлиц.Количество КАК КоличествоБезУлиц, СУлицами.Количество КАК КоличествоСУлицами ИЗ (ВЫБРАТЬ ЕСТЬNULL(ВложенныйЗапрос.Количество, 0) КАК Количество, ВложенныйЗапрос.НаселенныйПункт КАК НаселенныйПункт, ВложенныйЗапрос.Район КАК Район ИЗ (ВЫБРАТЬ КОЛИЧЕСТВО(ФизическиеЛица.Индекс) КАК Количество, ФизическиеЛица.НаселенныйПункт КАК НаселенныйПункт, ФизическиеЛица.НаселенныйПункт.Район КАК Район ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ГДЕ ФизическиеЛица.Улица = &Улица СГРУППИРОВАТЬ ПО ФизическиеЛица.НаселенныйПункт.Район, ФизическиеЛица.НаселенныйПункт) КАК ВложенныйЗапрос ГДЕ ВложенныйЗапрос.Количество >= &КоличествоБезУлиц) КАК БезУлиц ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЕСТЬNULL(ВложенныйЗапрос.Количество, 0) КАК Количество, ВложенныйЗапрос.НаселенныйПункт КАК НаселенныйПункт, ВложенныйЗапрос.Район КАК Район ИЗ (ВЫБРАТЬ КОЛИЧЕСТВО(ФизическиеЛица.Индекс) КАК Количество, ФизическиеЛица.НаселенныйПункт КАК НаселенныйПункт, ФизическиеЛица.НаселенныйПункт.Район КАК Район ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ГДЕ ФизическиеЛица.Улица <> &Улица СГРУППИРОВАТЬ ПО ФизическиеЛица.НаселенныйПункт.Район, ФизическиеЛица.НаселенныйПункт) КАК ВложенныйЗапрос ГДЕ ВложенныйЗапрос.Количество >= &КоличествоСУлицами) КАК СУлицами ПО БезУлиц.НаселенныйПункт = СУлицами.НаселенныйПункт) КАК ВложенныйЗапрос Только у меня населенные пункты где все жители без улиц выводятся даже если Стоит параметр "количество жителей без улицы" >= 20. Но меня такой вариант устраивает. Всем спасибо. |
|||
26
kuza2000
24.08.11
✎
14:58
|
В варианте1 еще СГРУППИРОВАТЬ ПО, конечно, надо...
Вариант2 ВЫБРАТЬ НаселенныеПункты.Ссылка, КОЛИЧЕСТВО(ФизЛицаСУлицами.Ссылка), КОЛИЧЕСТВО(ФизЛицаБезУлиц.Ссылка) ИЗ НаселенныеПункты ЛЕВОЕ СОЕДИНЕНИЕ ФизЛица ФизЛицаБезУлиц ПО ФизЛица.НаселенныйПункт = НаселенныеПункты.Ссылка И ФизЛица.Улица = Справочник.Улицы.ПустаяСсылка ЛЕВОЕ СОЕДИНЕНИЕ ФизЛица ФизЛицаСУлицами ПО ФизЛица.НаселенныйПункт = НаселенныеПункты.Ссылка И ФизЛица.Улица <> Справочник.Улицы.ПустаяСсылка СГРУППИРОВАТЬ ПО НаселенныеПункты.Ссылка ИМЕЮЩИЕ КОЛИЧЕСТВО(ФизЛицаСУлицами.Ссылка)... И КОЛИЧЕСТВО(ФизЛицаБезУлиц.Ссылка)... |
|||
27
kuza2000
24.08.11
✎
14:59
|
(24) это не правильно, я не понял задачу
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |