ms-access-2010 returns #func[感叹号]
ms-access-2010 returns #func[exclamation mark]
我有一个包含开关的 sql 语句,我想在 ms-access-2010 上执行。
sql:
SELECT
TABLE_1.ID,
SWITCH
(
(TABLE_3.ID IN (7,8) AND TABLE_1.SOME_COLUMN = 2), (SELECT MAX(TABLE_4.ID) FROM TABLE_4 WHERE TABLE_4.TABLE_2_ID = TABLE_2.ID),
(SELECT MIN(TABLE_4.SOME_COLUMN) FROM TABLE_4 WHERE TABLE_4.TBL_2_ID = TABLE_1.TBL_2_ID)
)AS SOME_ALIAS
FROM
((TABLE_1
LEFT JOIN TABLE_2 ON TABLE_1.TABLE_2_ID = TABLE_2.ID)
LEFT JOIN TABLE_3 ON TABLE_2.TABLE_3_ID = TABLE_3.ID)
在我的结果中,'some_column' 列始终是 #Function!
如果我不使用 switch 语句并将这两种情况的子选择添加为正常的选择字段,如下所示:
SELECT
TABLE_1.ID,
(SELECT MAX(TABLE_4.ID) FROM TABLE_4 WHERE TABLE_4.TABLE_2_ID = TABLE_2.ID) AS SOME_COLUMN_1,
(SELECT MIN(TABLE_4.SOME_COLUMN) FROM TABLE_4 WHERE TABLE_4.TBL_2_ID = TABLE_1.TBL_2_ID) AS SOME_COLUMN_2
FROM
((TABLE_1
LEFT JOIN TABLE_2 ON TABLE_1.TABLE_2_ID = TABLE_2.ID)
LEFT JOIN TABLE_3 ON TABLE_2.TABLE_3_ID = TABLE_3.ID)
我没有遇到任何问题(只有几行 SOME_COLUMN_1 和 SOME_COLUMN_2 中没有值)。
这里 #FUNCTION!
结果的原因是什么?
Switch
语句需要偶数个参数。您只传递了 3 个参数,因此导致错误。
您可以使用 IIF
,或者添加一个额外的比较参数(如果您想要 return 最后一个参数,如果第一个参数不是,则可能只是 True
作为第三个参数'真实)。
SELECT
TABLE_1.ID,
IIF
(
(TABLE_3.ID IN (7,8) AND TABLE_1.SOME_COLUMN = 2), (SELECT MAX(TABLE_4.ID) FROM TABLE_4 WHERE TABLE_4.TABLE_2_ID = TABLE_2.ID),
(SELECT MIN(TABLE_4.SOME_COLUMN) FROM TABLE_4 WHERE TABLE_4.TBL_2_ID = TABLE_1.TBL_2_ID)
)AS SOME_ALIAS
FROM
((TABLE_1
LEFT JOIN TABLE_2 ON TABLE_1.TABLE_2_ID = TABLE_2.ID)
LEFT JOIN TABLE_3 ON TABLE_2.TABLE_3_ID = TABLE_3.ID)
我有一个包含开关的 sql 语句,我想在 ms-access-2010 上执行。
sql:
SELECT
TABLE_1.ID,
SWITCH
(
(TABLE_3.ID IN (7,8) AND TABLE_1.SOME_COLUMN = 2), (SELECT MAX(TABLE_4.ID) FROM TABLE_4 WHERE TABLE_4.TABLE_2_ID = TABLE_2.ID),
(SELECT MIN(TABLE_4.SOME_COLUMN) FROM TABLE_4 WHERE TABLE_4.TBL_2_ID = TABLE_1.TBL_2_ID)
)AS SOME_ALIAS
FROM
((TABLE_1
LEFT JOIN TABLE_2 ON TABLE_1.TABLE_2_ID = TABLE_2.ID)
LEFT JOIN TABLE_3 ON TABLE_2.TABLE_3_ID = TABLE_3.ID)
在我的结果中,'some_column' 列始终是 #Function!
如果我不使用 switch 语句并将这两种情况的子选择添加为正常的选择字段,如下所示:
SELECT
TABLE_1.ID,
(SELECT MAX(TABLE_4.ID) FROM TABLE_4 WHERE TABLE_4.TABLE_2_ID = TABLE_2.ID) AS SOME_COLUMN_1,
(SELECT MIN(TABLE_4.SOME_COLUMN) FROM TABLE_4 WHERE TABLE_4.TBL_2_ID = TABLE_1.TBL_2_ID) AS SOME_COLUMN_2
FROM
((TABLE_1
LEFT JOIN TABLE_2 ON TABLE_1.TABLE_2_ID = TABLE_2.ID)
LEFT JOIN TABLE_3 ON TABLE_2.TABLE_3_ID = TABLE_3.ID)
我没有遇到任何问题(只有几行 SOME_COLUMN_1 和 SOME_COLUMN_2 中没有值)。
这里 #FUNCTION!
结果的原因是什么?
Switch
语句需要偶数个参数。您只传递了 3 个参数,因此导致错误。
您可以使用 IIF
,或者添加一个额外的比较参数(如果您想要 return 最后一个参数,如果第一个参数不是,则可能只是 True
作为第三个参数'真实)。
SELECT
TABLE_1.ID,
IIF
(
(TABLE_3.ID IN (7,8) AND TABLE_1.SOME_COLUMN = 2), (SELECT MAX(TABLE_4.ID) FROM TABLE_4 WHERE TABLE_4.TABLE_2_ID = TABLE_2.ID),
(SELECT MIN(TABLE_4.SOME_COLUMN) FROM TABLE_4 WHERE TABLE_4.TBL_2_ID = TABLE_1.TBL_2_ID)
)AS SOME_ALIAS
FROM
((TABLE_1
LEFT JOIN TABLE_2 ON TABLE_1.TABLE_2_ID = TABLE_2.ID)
LEFT JOIN TABLE_3 ON TABLE_2.TABLE_3_ID = TABLE_3.ID)