преобразовать ноль в 0 - PullRequest
       9

преобразовать ноль в 0

0 голосов
/ 05 ноября 2018

У меня есть скрипт:

SELECT 
    dtypcode,
    debtornum AS 'Debtor Number',
    debtorchk AS 'Check Digit',
    balancedr AS 'Debit Balance',
    balancecr AS 'Credit Balance' ,
    balancedr + balancecr AS 'Balance'
FROM 
    [pthdbo].[ldrdtyp] A
JOIN 
    [pthdbo].[ldrdbtr] B ON A.tpkldrdtyp = B.tfkldrdtyp
WHERE 
    ((balancedr + balancecr) > '0'
      OR (balancedr + balancecr) < '0')
    --debtornum = '921835'
    AND dtypcode = 'OODEB'

Возвращает следующее:

    OODEB       921846  1   550.00  -380.00 170.00
    OODEB       922009  5   715.00  -725.00 -10.00

однако, если мы посмотрим только на долговую нагрузку '921835', мы увидим следующее:

   OODEB        921835  4   200.00  NULL    NULL

Из-за того, что Кредитный баланс заимствованного долга '921835' равен NULL, а не 0, вычисления не работают и не отображаются в результате запроса в виде баланса.

Мы не хотим обновлять таблицу, чтобы она отражала 0, где она может быть NULL - может ли кто-нибудь пролить свет на решение, которое преобразует любые значения NULL в поля «Дебет-баланс» или «Кредитный баланс» на fly ', чтобы баланс был отражен, если в таблице есть либо кредитный баланс, либо дебетовый баланс вместе с NULL для другого столбца.

Заранее спасибо,

JR

Ответы [ 4 ]

0 голосов
/ 05 ноября 2018

Попробуйте это:

SELECT 
 dtypcode,
 debtornum    AS 'Debtor Number',
 debtorchk    AS 'Check Digit',
 balancedr    AS 'Debit Balance',
 balancecr    AS 'Credit Balance' ,
 balancedr + balancecr AS 'Balance'
 FROM [pthdbo].[ldrdtyp] A
 JOIN [pthdbo].[ldrdbtr] B
 ON A.tpkldrdtyp = B.tfkldrdtyp
 WHERE ((ISNULL(balancedr,0) + ISNULL(balancecr,0)) > '0'
 OR (ISNULL(balancedr,0) + ISNULL(balancecr,0)) < '0')
 --debtornum = '921835'
 AND dtypcode = 'OODEB'
0 голосов
/ 05 ноября 2018

Вы можете использовать метод ISNULL

ISNULL (параметр, 0)

SELECT 
 dtypcode,
 debtornum AS 'Debtor Number',
 debtorchk AS 'Check Digit',
 ISNULL(balancedr,0) AS 'Debit Balance',
 ISNULL(balancecr,0) AS 'Credit Balance' ,
 ISNULL(balancedr + balancecr) AS 'Balance'
 FROM [pthdbo].[ldrdtyp] A
 JOIN [pthdbo].[ldrdbtr] B
 ON A.tpkldrdtyp = B.tfkldrdtyp
 WHERE ((balancedr + balancecr) > '0'
 OR (balancedr + balancecr) < '0')
 --debtornum = '921835'
 AND dtypcode = 'OODEB'
0 голосов
/ 05 ноября 2018

Вы можете попробовать использовать coalesce() функцию

SELECT 
   dtypcode,
   debtornum    AS 'Debtor Number',
   debtorchk    AS 'Check Digit',
   coalesce(balancedr,0)    AS 'Debit Balance',
   coalesce(balancecr,0)    AS 'Credit Balance' ,
   coalesce(balancedr,0) + coalesce(balancecr,0) AS 'Balance'
   FROM [pthdbo].[ldrdtyp] A
   JOIN [pthdbo].[ldrdbtr] B
   ON A.tpkldrdtyp = B.tfkldrdtyp
   WHERE ((coalesce(balancedr,0) + coalesce(balancecr,0)) > '0'
   OR (coalesce(balancedr,0) + coalesce(balancecr,0)) < '0')
   --debtornum = '921835'
   AND dtypcode = 'OODEB'
0 голосов
/ 05 ноября 2018

Вы можете использовать COALESCE для работы с NULL на лету, что является общим

COALESCE(balancedr,0)

В SQL Server вы можете использовать ISNULL ()

ISNULL(balancedr,0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...