powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите пожалуйста написать запрос (MSAccess).
7 сообщений из 7, страница 1 из 1
Помогите пожалуйста написать запрос (MSAccess).
    #32378334
lamefox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста написать запрос (MSAccess).

Есть 2 связанные таблицы, по idDeliveries, связь Один (Deliveries) – ко Многим (Tanks):



Код: plaintext
1.
2.
3.
4.
5.
Deliveries
 --------------------
 
PK| idDeliveries
  | idOrder
 



Код: plaintext
1.
2.
3.
4.
5.
Tanks
 --------------------
 
PK| idTanks
  | idDeliveries
  | idIncomingItems





Необходимо вывести для каждой записи из Deliveries, сгруппированной по idOrder, количество записей из Tanks, содержащих Null в поле idIncomingItems.
Собственно это не проблема, мне не понятно, почему не выводятся количество записей равное "0", если для некоторого idOrder в Deliveries, существует некоторый набор данных в Tanks, но где не содержится ни одной записи с полем idIncomingItems содержащем Null. Т.е. все поля заполнены.

Например:

Даны таблицы

Deliveries:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
idDeliveries   idOrder  |result
 ------------------------+------
 
 59               20        |????
 60               21        | 6 
 64               22        | 0 
 65               23        | 0 
 66               24        |????
 67               24        |????
 68               25        | 8 
 69               25        | 8 
 70               25        | 8 
 


Tanks:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
idTank idIncomingItems idDeliveries
 ------------------------------------
 
 24        25                59 
 25        26                59 
 26        27                59 
 27        33                59 
 28        28                59 
 29        34                59 
 30        35                59 
 31        36                59 
 32        37                60 
 33                        60 
 34                        60 
 35                        60 
 36                        60 
 37                        60 
 38                        60 
 39        31                66 
 40        32                67 
 41        38                68 
 42                        68 
 43                        68 
 44                        68 
 45                        69 
 46                        69 
 47                        69 
 48                        69 
 49                        70 
 

Используем запрос:

Код: plaintext
1.
2.
3.
SELECT Count(Tanks.idTank) AS CountTanks, Deliveries.idOrder
FROM Deliveries LEFT JOIN Tanks ON Deliveries.idDeliveries = Tanks.idDeliveries
WHERE (((Tanks.idIncomingItems) Is Null))
GROUP BY Deliveries.idOrder;



Получаем результат:


Код: plaintext
1.
2.
3.
4.
5.
6.
CountTanks    idOrder
 ------------------------
 
 6                 21 
 0                 22 
 0                 23 
 8                 25 



Вопрос:
Почему не выводятся данные для idOrder = 24 и 25 ?
...
Рейтинг: 0 / 0
Помогите пожалуйста написать запрос (MSAccess).
    #32378386
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
count не может иметь значение 0.
как можно посчитать то, чего нет???
если хочешь получить нули, то тебе придется связать результат запроса еще раз с Deliveries и там где Null написать 0.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать запрос (MSAccess).
    #32378420
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нет VIG-a, то вот на скорую руку:

Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT a.idOrder, nz(b.inl, 0 ) AS inl
FROM Deliveries as a  LEFT JOIN (
SELECT Deliveries.idOrder, Sum(-([idIncomingItems] Is Null)) AS inl
FROM Deliveries INNER JOIN Tanks ON Deliveries.idDeliveries = Tanks.idDeliveries
GROUP BY Deliveries.idOrder) as b
ON a.idOrder = b.idOrder
GROUP BY a.idOrder, nz([inl], 0 );
...
Рейтинг: 0 / 0
Помогите пожалуйста написать запрос (MSAccess).
    #32378440
lamefox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
count не может иметь значение 0.
как можно посчитать то, чего нет???

Тогда почему выдаются ноли для idOredr = 22 и 23 ?


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CountTanks    idOrder
 ------------------------
 
 6                 21 
 0                 22 
 0                 23 
 8                 25 
 
...
Рейтинг: 0 / 0
Помогите пожалуйста написать запрос (MSAccess).
    #32378513
lamefox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А без использования NZ можно как-то реализовать ?

Спасибо
...
Рейтинг: 0 / 0
Помогите пожалуйста написать запрос (MSAccess).
    #32378658
Гостья
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно. С помощью IIF'а.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать запрос (MSAccess).
    #32378803
lamefox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, получилось :))
Код: plaintext
1.
2.
SELECT Sum(IIf([Tanks].[idIncomingItems] Is Null, 1 , 0 )) AS SumIncoming, Deliveries.idOrder
FROM Deliveries LEFT JOIN Tanks ON Deliveries.idDeliveries = Tanks.idDeliveries
GROUP BY Deliveries.idOrder;
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите пожалуйста написать запрос (MSAccess).
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]