|  | Posted by Robert Klemme on 05/29/07 12:18 
On 29.05.2007 14:06, M A Srinivas wrote:> On May 29, 4:37 pm, i...@vanoordt.nl wrote:
 >> Using coalesce is the same sort of solution as using isnull. It
 >> doesn't behave as my requirements state. In particular, the result
 >> will be 0 if all inputs are null. It is required that the result be
 >> null.
 >> Thanks anyway.
 >
 > No. Did you test
 >
 > Result will be null  if all are null .
 > since
 >  COALESCE(Col1, Col2, Col3)  returns null and
 > 0 + 0 + 0 + null  is null
 > COALESCE takes  more arguments and ISNULL only two
 >
 > declare @a table (col1 int,col2 int,col3 int)
 >
 > insert into @a values (1,null,null)
 > insert into @a values (null,2,null)
 > insert into @a values (null,null,3)
 > insert into @a values (1,2,null)
 > insert into @a values (null,2,3)
 > insert into @a values (1,null,3)
 > insert into @a values (null,null,null)
 >
 > select COALESCE(Col1, 0) + COALESCE(Col2, 0) + COALESCE(Col3, 0) +
 > COALESCE(Col1,
 > Col2, Col3) from @a
 >
 >
 > 2
 > 4
 > 6
 > 4
 > 7
 > 5
 > NULL
 
 Now there is only the small issue that one of the column values is added
 twice - and you do not know which one.  Something like this is probably
 better:
 
 -- untested
 SELECT CASE
 WHEN COALESCE(col1, col2, col2) IS NULL
 THEN NULL
 ELSE
 COALESCE(col1, 0) +
 COALESCE(col2, 0) +
 COALESCE(col3, 0)
 END
 ....
 
 Kind regards
 
 robert
 [Back to original message] |