I'm trying to use the SWITCH function in MS Access and I keep getting told there aren't the right number of arguments. I'm new to the switch function but I understand the syntax.
Switch ( expression1, value1, expression2, value2, ... expression_n, value_n )
Am I doing something in the switch that can't be used, the sub-queries maybe? I've checked my commas, parentheses and that there is an expression and then a return value. Driving me crazy as I'm converting from T-SQL to jet and replacing a CASE statement that worked perfectly fine.
Switch(
(eh.STARTDTE <> sh.STARTDTE AND IsNull(eh.ENDDTE,"") <> IsNull(sh.ENDDTE,"") AND eh.STARTDTE < sh.STARTDTE),
"FAIL - Employment Start Date Before Service Start Date",
(eh.STARTDTE <> sh.STARTDTE AND IsNull(eh.ENDDTE,"") <> IsNull(sh.ENDDTE,"") AND eh.ENDDTE > sh.ENDDTE),
"FAIL - Employment End Date After Service End Date",
(eh.STARTDTE <> sh.STARTDTE AND IsNull(eh.ENDDTE,"") <> IsNull(sh.ENDDTE,"") AND (
SELECT
COUNT(*)
FROM
emphist AS eh2
WHERE
eh2.MEMBNO = sh.MEMBNO
AND eh2.EMPID = sh.EMPID
AND eh2.ENDDTE = DateAdd(dd,-1,eh.STARTDTE)
) = 0),
"FAIL - Previous Employment Period Corrupt or Missing",
(eh.STARTDTE <> sh.STARTDTE AND IsNull(eh.ENDDTE,"") <> IsNull(sh.ENDDTE,"") AND (
SELECT
COUNT(*)
FROM
emphist AS eh2
WHERE
eh2.MEMBNO = sh.MEMBNo
AND eh2.EMPID = sh.EMPID
AND eh2.ENDDTE = DateAdd(dd,-1,eh.STARTDTE)
) = 0),
"FAIL - Previous Employment Period Corrupt or Missing",
(eh.STARTDTE <> sh.STARTDTE AND IsNull(eh.ENDDTE,"") <> IsNull(sh.ENDDTE,"") AND (
SELECT
COUNT(*)
FROM
emphist AS eh2
WHERE
eh2.MEMBNO = sh.MEMBNO
AND eh2.EMPID = sh.EMPID
AND eh2.STARTDTE = DateAdd(dd,1,eh.ENDDTE)
) = 0),
"FAIL - Next Employment Period Corrupt or Missing",
(eh.STARTDTE = sh.STARTDTE AND eh.ENDDTE <> sh.ENDDTE AND (
SELECT
COUNT(*)
FROM
emphist AS eh2
WHERE
eh2.MEMBNO = sh.MEMBNO
AND eh2.EMPID = sh.EMPID
AND eh2.STARTDTE = DateAdd(dd,1,eh.ENDDTE)
) = 0),
"FAIL - Next Employment Period Corrupt or Missing",
(eh.STARTDTE <> sh.STARTDTE AND eh.ENDDTE = sh.ENDDTE AND (
SELECT
COUNT(*)
FROM
emphist AS eh2
WHERE
eh2.MEMBNO = sh.MEMBNO
AND eh2.EMPID = sh.EMPID
AND eh2.ENDDTE = DateAdd(dd,-1,eh.STARTDTE)
) = 0),
"FAIL - Previous Employment Period Corrupt or Missing",
(eh.STARTDTE = sh.STARTDTE AND eh.ENDDTE = sh.ENDDTE AND (
SELECT
COUNT(*)
FROM
emphist AS eh2
WHERE
eh2.MEMBNO = sh.MEMBNO
AND eh2.EMPID = sh.EMPID
) <> 1),
"FAIL - Too Many or No Employment History Records"
) AS "Reason"
UPDATED WITH ANSWERS
Switch(
(eh.STARTDTE <> sh.STARTDTE AND NZ(eh.ENDDTE,"") <> NZ(sh.ENDDTE,"") AND eh.STARTDTE < sh.STARTDTE),
"FAIL - Employment Start Date Before Service Start Date",
(eh.STARTDTE <> sh.STARTDTE AND NZ(eh.ENDDTE,"") <> NZ(sh.ENDDTE,"") AND eh.ENDDTE > sh.ENDDTE),
"FAIL - Employment End Date After Service End Date",
(eh.STARTDTE <> sh.STARTDTE AND NZ(eh.ENDDTE,"") <> NZ(sh.ENDDTE,"") AND (
SELECT
COUNT(*)
FROM
emphist AS eh2
WHERE
eh2.MEMBNO = sh.MEMBNO
AND eh2.EMPID = sh.EMPID
AND eh2.ENDDTE = DateAdd("dd",-1,eh.STARTDTE)
) = 0),
"FAIL - Previous Employment Period Corrupt or Missing",
(eh.STARTDTE <> sh.STARTDTE AND NZ(eh.ENDDTE,"") <> NZ(sh.ENDDTE,"") AND (
SELECT
COUNT(*)
FROM
emphist AS eh2
WHERE
eh2.MEMBNO = sh.MEMBNo
AND eh2.EMPID = sh.EMPID
AND eh2.ENDDTE = DateAdd("dd",-1,eh.STARTDTE)
) = 0),
"FAIL - Previous Employment Period Corrupt or Missing",
(eh.STARTDTE <> sh.STARTDTE AND NZ(eh.ENDDTE,"") <> NZ(sh.ENDDTE,"") AND (
SELECT
COUNT(*)
FROM
emphist AS eh2
WHERE
eh2.MEMBNO = sh.MEMBNO
AND eh2.EMPID = sh.EMPID
AND eh2.STARTDTE = DateAdd("dd",1,eh.ENDDTE)
) = 0),
"FAIL - Next Employment Period Corrupt or Missing",
(eh.STARTDTE = sh.STARTDTE AND eh.ENDDTE <> sh.ENDDTE AND (
SELECT
COUNT(*)
FROM
emphist AS eh2
WHERE
eh2.MEMBNO = sh.MEMBNO
AND eh2.EMPID = sh.EMPID
AND eh2.STARTDTE = DateAdd("dd",1,eh.ENDDTE)
) = 0),
"FAIL - Next Employment Period Corrupt or Missing",
(eh.STARTDTE <> sh.STARTDTE AND eh.ENDDTE = sh.ENDDTE AND (
SELECT
COUNT(*)
FROM
emphist AS eh2
WHERE
eh2.MEMBNO = sh.MEMBNO
AND eh2.EMPID = sh.EMPID
AND eh2.ENDDTE = DateAdd("dd",-1,eh.STARTDTE)
) = 0),
"FAIL - Previous Employment Period Corrupt or Missing",
(eh.STARTDTE = sh.STARTDTE AND eh.ENDDTE = sh.ENDDTE AND (
SELECT
COUNT(*)
FROM
emphist AS eh2
WHERE
eh2.MEMBNO = sh.MEMBNO
AND eh2.EMPID = sh.EMPID
) <> 1),
"FAIL - Too Many or No Employment History Records"
) AS "Reason"
It is not Switch but IsNull that raises the error. So replace all these faulty statements:
IsNull(eh.ENDDTE,"")
with:
Nz(eh.ENDDTE)