![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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)