Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

NULL в запросе


Спрашивающий ©   (2006-03-20 16:26:00) 

Выполняю запрос:
SELECT NAME,SUM(SUM_TOTAL)
FROM CLIENTS
LEFT JOIN CARS ON (CARS.CLIENT_ID=CLIENTS.ID)
GROUP BY NAME

Если клиент не "засветился", то вместо SUM выводится NULL (пусто), а хочется 0 (ноль).

Как исправить?


Спрашивающий   (2006-03-20 18:55:00) [1]

Да, пока забито только 5 товаров в одной категории. Но проведено три продажи, а запрос выводит только последнюю...


kaif   (2006-03-20 18:42:00) [2]

Под разнообразием я понимаю вот что.
Допустим у Вас есть куча категорий.
И куча товаров.
Но товары вносились все на одну категорию. Тогда такой запрос и вернет аккурат одну запись.
Запросите
SELECT DISTINCT category_id FROM GOODS.
Если это тоже вернет одну запись, то дело в этом.


Спрашивающий   (2006-03-20 18:38:00) [3]

> Мне кажется, что эту ветку лучше перенести в Базы Данных.

Пока писал в Прочем, уже перенесли :) Спасибо

> А категории товарам назначены?

Конечно

> goods.category_id  - там есть разнообразие значений более 1?

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

> И честно говоря такая любовь к сплошным LEFT JOIN-ам меня пугает...

Буду рад подсказке, как можно по другому...


kaif   (2006-03-20 18:31:00) [4]

Мне кажется, что эту ветку лучше перенести в Базы Данных.
А категории товарам назначены?
goods.category_id  - там есть разнообразие значений более 1?

И честно говоря такая любовь к сплошным LEFT JOIN-ам меня пугает...


Спрашивающий   (2006-03-20 18:22:00) [5]

Пожалуйста...


Спрашивающий   (2006-03-20 17:55:00) [6]

Еще вопрос..

Есть таблица товаров, продаж товаров. Связь такая:
goods.id
|
sold_goods.good_id
sold_goods.sold_id
|
solds.id
solds.sum_total

Необходимо узнать какой товар сколько раз продавался и сколько принес в общем. К тому же в товаре есть поле category_id (т.е. принадлежность категории) и хочется чтобы еще в одном запросе можно было узнать какая категория товаров сколько раз продавалась и сколько дохода принесла.
Делаю вот так:

SELECT categories.name, COUNT(sold_goods.id), SUM(COALESCE(sum_total, 0)) AS sum_total
FROM categories
LEFT JOIN goods ON (goods.category_id = categories.id)
LEFT JOIN sold_goods ON (sold_goods.good_id = goods.id)
LEFT JOIN solds ON (solds.id = sold_goods.sold_id)
GROUP BY categories.name

Этот запрос возвращает только одну запись и считает по ней же..

Объясните пожалуйста что не так?


kaif   (2006-03-20 17:01:00) [7]

Используй CASE.

SELECT
 NAME,
 SUM( case whenSUM_TOTAL is null then 0 elseSUM_TOTAL end)
FROM CLIENTS
LEFT JOIN CARS ON (CARS.CLIENT_ID=CLIENTS.ID)
GROUP BY NAME


MOA   (2006-03-20 16:56:00) [8]

>И чем лучше?
Если таблица такая:

CLIENT_ID SUM_TOTAL
1              NULL
1              10

Если таких строк не может быть - действительно, одинаково. Однако - бережёного Бог бережёт ;).


Спрашивающий   (2006-03-20 16:39:00) [9]

Спасибо всем, я нашел. Ключевое слово: COALESCE

COALESCE(ISNULL(SUM_TOTAL),0))

И почему нельзя привести все к одному виду?..


Ega23   (2006-03-20 16:37:00) [10]


> MOA ©   (20.03.06 16:30) [2]
>
> А лучше
> SUM(ISNULL(SUM_TOTAL,0))
>


И чем лучше?


Спрашивающий   (2006-03-20 16:32:00) [11]

Забыл ;) СУБД - Interbase


MOA   (2006-03-20 16:30:00) [12]

А лучше
SUM(ISNULL(SUM_TOTAL,0))


Ega23   (2006-03-20 16:27:00) [13]

СУБД вообще-то принято указывать.
В MS SQL - IsNull(SUM(SUM-TOTAL), 0)


Наверх

Титульная страница Поиск, карта сайта Написать письмо