возвращает значения как null

Я использую следующий оператор SQL, и я хочу, чтобы он возвращал нулевые значения, если нет никаких значений, поэтому «Coalesce», у меня есть одна проблема, хотя - она ​​не работает :)

Я думаю, может быть, потому, что строка не существует, поэтому, как бы добавить это условие в следующий оператор?

SELECT 
  D1.dr, 
  D1.cr, 
  D1.asset_no, 
  (open_bal + dr - cr) AS closing_balance 
FROM (SELECT 
        COALESCE(SUM(dr_amount), 0) AS dr, 
        COALESCE(SUM(cr_amount), 0) AS cr, 
        asset_no 
      FROM posting, sysasset 
      WHERE posting.asset_no = @AssetNumber 
        AND period >= asset_open_per 
      GROUP BY asset_no) AS D1, asset 
WHERE D1.asset_no = asset.asset_no
1
nl ja de
uhmm, если вы хотите вернуть null, то почему вы используете COALESCE ? можете ли вы объяснить, почему это не работает? : D любая ошибка?
добавлено автор John Woo, источник
Просто сказать «это не работает» не очень полезно. Можете ли вы добавить более подробную информацию - что именно возвращается и что вы ожидаете?
добавлено автор ChrisF, источник
если значение не существует, возвращайте null, но он не может возвращать null, если строка не существует
добавлено автор CHRISTOPHER MCCONVILLE, источник
ничего не возвращается
добавлено автор CHRISTOPHER MCCONVILLE, источник

2 ответы

о, я думаю, что записи не отображаются, потому что некоторые из них не существуют на другом столе? Причина, по которой они не отображаются, заключается в том, что вы присоединяетесь к ним с помощью INNER JOIN , попробуйте это вместо этого, используйте LEFT OUTER JOIN .

SELECT  D1.dr, 
        D1.cr, 
        D1.asset_no, 
        (COALESCE(open_bal,0) + dr - cr) AS closing_balance 
FROM 
    (
        SELECT  COALESCE(SUM(dr_amount), 0) AS dr, 
                COALESCE(SUM(cr_amount), 0) AS cr, 
                asset_no 
        FROM    posting
                LEFT JOIN sysasset 
                    ON  posting.asset_no = asset.asset_no
        WHERE   posting.asset_no = @AssetNumber  AND 
                period >= asset_open_per 
        GROUP   BY asset_no
    ) AS D1
    LEFT JOIN asset 
        ON D1.asset_no = asset.asset_no
1
добавлено
ok, я буду обновлять, когда он вернет неверный результат.
добавлено автор John Woo, источник
Да, вы правы, я попробую это и дам вам знать, спасибо
добавлено автор CHRISTOPHER MCCONVILLE, источник

Try replacing the coalesce with isnull. Expressions with coalesce can still be considered null. MSDN ref

1
добавлено
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)