powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите пожалуйста правильно посчитать разность
4 сообщений из 4, страница 1 из 1
Помогите пожалуйста правильно посчитать разность
    #34049095
Negator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Следующая задача. Имеем две таблицы:

main
----
main_id| value
1| 50
2| 60
3| 40
4| 20

second
sec_id| main_id| value
1| 1| 10
2| 1| 15
3| 2| 5
4| 3| 10


Нужно для каждого main_id посчитать разницу между value в main и всеми value в second, для которых second.main_id = main.main_id.

Проблема в том что в случае отсутсвия строк в second получается NULL!
Я делаю так:

SELECT
main_id,
value - (SELECT SUM(value) FROM second WHERE second.main_id = main.main_id)
FROM
main;

Если так делать, то по main_id номер 4 будет получатся NULL вместо положенного 20. Как решить эту проблему? Я придумал только одно: проверять на наличие записей в таблице second и использовать два запроса объединенные UNION. Но очень желательно сделать без этого.

Заранее спасибо!
...
Рейтинг: 0 / 0
Помогите пожалуйста правильно посчитать разность
    #34049139
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может стОит вот так попробывать:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT main_id,
       value - isnull(
                       (
                          SELECT SUM(value) 
                            FROM second 
                           WHERE second.main_id = main.main_id
                       ),  0 
                     ) as delta_value
  FROM main;
...
Рейтинг: 0 / 0
Помогите пожалуйста правильно посчитать разность
    #34049155
Negator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анна, большое спасибо!

Это то что нужно.
Следующий вопрос уже только из интереса. Если бы мы находились за рамками T-SQL и не имели бы в распоряжении функции ISNULL, то как бы вышли из данной ситуации?
...
Рейтинг: 0 / 0
Помогите пожалуйста правильно посчитать разность
    #34049176
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NegatorЕсли бы мы находились за рамками T-SQL и не имели бы в распоряжении функции ISNULL, то как бы вышли из данной ситуации?Вообще, в ANSI-SQL на этот случай (преобразование неопределенного значения NULL в НЕКОТОРОЕ ОПРЕДЕЛЕННОЕ значение) предусмотрена функция
Код: plaintext
COALESCE(expr1, expr2, ..., exprN)
, возвращающая первый непустой (IS NOT NULL) параметр из списка (expr1, expr2, ..., exprN).
И если сервер претендует на совместимость с ANSI-SQL92 (и выше), то сия функция должна в нем присутствовать.

Кроме того, есть выражение CASE, которое так же описано в стандарте ANSI-SQL92
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите пожалуйста правильно посчитать разность
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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