0

Suppose I have two tables to outer join

Tab1:
ID  Nam
1   Joe
2   Moe
3   Flo

Tab2:
ID  Val     y   w
1   stuff   66  33
2   duff    67  44

and one of the resulting columns is derived -- i.e., it's a function of two other columns

SELECT Tab1.*, Tab2.Val, Tab2.y, Tab2.w, week(Tab2.y,Tab2.w) AS week
FROM Tab1 LEFT JOIN Tab2 ON Tab1.ID = Tab2.ID

As expected, where there is no join, nulls appear under the actual columns, but #Error appears under the derived column:

ID  Nam Val     y   w   week
1   Joe stuff   66  33  66w33
2   Moe duff    67  44  67w44
3   Flo                 #Error

First, I thought I could prevent #Error via the useful-for-handling-null-strings function Nz() but Nz(week(Tab2.y,Tab2.w)) did nothing. Next, I thought it was something I had to handle in my week() function -- i.e., handle cases of IsNull(y) -- but I discovered that it doesn't even get called for the "null cases".

How to prevent #Error values from showing?

4
  • Use week(Tab2.y, Nz(Tab2.w, ValueYouWantInstead)) You need to apply the function that replaces the null with another value before the function call. Commented Jun 10, 2015 at 1:23
  • It worked, @ypercube! At least, i no longer get #Error. I got 0w00 which I did have to handle in my function: if y=0 ... Care to elaborate in an answer?
    – Martin F
    Commented Jun 10, 2015 at 1:33
  • What does this function (week) do? Simple concatenation? Can't you use Nz(Tab2.y, '0') & 'w' & Nz(Tab2.w, '00') AS week ? Commented Jun 10, 2015 at 1:48
  • @ypercube - That's more or less what it does. I use it in a few places so i'd rather keep it as a function -- unless there's good reason not to do so...
    – Martin F
    Commented Jun 10, 2015 at 15:12

1 Answer 1

1

You need to apply the function (Nz) that replaces the null with another value before the week function call. Use:

week( Nz(Tab2.y, Value_for_y) , Nz(Tab2.w, Value_for_w) ) 

You probably also need tests against the special Value_for_y or Value_for_w inside week().

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.