Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как суммировать столбцы sum при left join, ... пустые значения мешают 
V
    Опции темы
koroplysov
Дата 13.9.2011, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 29.8.2009

Репутация: нет
Всего: нет



Народ, помогите разъяснить мое непонимание. Опишу проблему на примере. Есть 3 таблицы связаные по суррогатному ключу, в первой указана дата(дата всегда есть!!!) и ссылка на другие таблицы(пятна в северном полушарии и южном) где хранятся пятна и их размер. За определенную дату может не быть пятен на солнце, а может быть и не одно.
SUN
|-------------------------------------|
|ID_SUN|DAT         |ID_N|ID_S|
|-------|---------------|-----|-------|
|1       |06.09.2011|      |         |
|2       |07.09.2011|1    |         |
|3       |07.09.2011|2    |         |
|3       |07.09.2011|      |1       |

SPOT_N
|----------------|---|
|ID_SPOT_N |SIZ|
|---------------|----|
|1                 |0.6|
|2                 |0.3|

SPOT_S
|---------------|----|
|ID_SPOT_S |SIZ|
|---------------|----|
|1                 |0.2|

Проблема в том, что нужно иногда выбирать общую площадь пятен за день, то биш сумму, но связывать таблицы SPOT_N и SPOT_S с таблицей SUN обязательно нужно через left join(это кусочек моей проблемы в примере, поэтому просто так нужно). То есть:

Код

select DAT, sum(N.SIZ) as NR,sum(S.SIZ) as SR,sum(N.SIZ)+sum(S.SIZ) as AL
from SUN
left join SPOT_N N on ID_SPOT_N=ID_N
left join SPOT_S S on ID_SPOT_S=ID_S
group by DAT


По понятной причине могут быть пустые ячейки. И тогда в итоговом столбце AL будет пусто, если в одном предыдущем пусто, а в другом есть сумма. А нужно, по логике, не учитывать эти пустые.
Подскажите как решить проблему? Чувствую, что нужно смотреть в сторону case, но чего-то не получается. Видимо где-то идеологические моменты не усвоил. Поделитесь мыслью.
PM MAIL   Вверх
rodnover
Дата 13.9.2011, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: 1
Всего: 10



Код

select DAT, coalesce(sum(N.SIZ), 0) as NR, coalesce(sum(S.SIZ), 0) as SR, coalesce(sum(N.SIZ), 0) + coalesce(sum(S.SIZ), 0) as AL
from SUN
left join SPOT_N N on ID_SPOT_N=ID_N
left join SPOT_S S on ID_SPOT_S=ID_S
group by DAT


Это сообщение отредактировал(а) rodnover - 13.9.2011, 09:05
PM MAIL   Вверх
koroplysov
Дата 13.9.2011, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 29.8.2009

Репутация: нет
Всего: нет



я немного длиннее решил
Код

select DAT, case when sum(N.SIZ) is null then 0 else sum(N.SIZ) end as NR,case when sum(S.SIZ) is null then 0 else sum(S.SIZ) end as SR,case when sum(N.SIZ) is null then 0 else sum(N.SIZ) end + case when sum(S.SIZ) is null then 0 else sum(S.SIZ) end as AL
from SUN
left join SPOT_N N on ID_SPOT_N=ID_N
left join SPOT_S S on ID_SPOT_S=ID_S
group by DAT


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.1531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.