Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите пожалуйста написать запрос (MSAccess). / 7 сообщений из 7, страница 1 из 1
16.01.2004, 12:47
    #32378334
lamefox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста написать запрос (MSAccess).
Помогите пожалуйста написать запрос (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
16.01.2004, 13:13
    #32378386
sasha_1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста написать запрос (MSAccess).
count не может иметь значение 0.
как можно посчитать то, чего нет???
если хочешь получить нули, то тебе придется связать результат запроса еще раз с Deliveries и там где Null написать 0.
...
Рейтинг: 0 / 0
16.01.2004, 13:23
    #32378420
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста написать запрос (MSAccess).
Если нет 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
16.01.2004, 13:33
    #32378440
lamefox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста написать запрос (MSAccess).
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
16.01.2004, 14:07
    #32378513
lamefox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста написать запрос (MSAccess).
А без использования NZ можно как-то реализовать ?

Спасибо
...
Рейтинг: 0 / 0
16.01.2004, 15:14
    #32378658
Гостья
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста написать запрос (MSAccess).
Можно. С помощью IIF'а.
...
Рейтинг: 0 / 0
16.01.2004, 16:32
    #32378803
lamefox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста написать запрос (MSAccess).
Всем спасибо, получилось :))
Код: 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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите пожалуйста написать запрос (MSAccess). / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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