[英]Joining on multiple conditions with multiple case statements
我正在加入:
SELECT COLUMNA,COLUMNB..
FROM MYTABLE
JOIN ON
A1.B = B1.B
AND A1.C = B1.C
AND [JOIN ON SOME_CLAUSE1 AND SOME_CLAUSE2 ONLY IF CERTAIN CONDITIONS ARE MET]
换句话说,如果不满足那些“某些条件”,我只想加入:
A1.B = B1.B
AND A1.C = B1.C
我该怎么做?
这是我的非伪代码:
SELECT *
FROM my TABLE
JOIN
on Onyx.iownerid = mscrm.fi_id.search
AND onyx.question = mscrm.question
AND onyx.response =
CASE
WHEN onyx.questiontype IN (1,2) THEN
CASE
WHEN onyx.questiontype=2 THEN mscrm.answer
WHEN onyx.questiontype=1 THEN
(
SELECT TOP 1
vchparameterdesc
FROM db..referenceparameters
WHERE iparameterid=mscrm.answer)
END
END
伪问题的伪答案:
SELECT COLUMNA,COLUMNB..
FROM MYTABLE
JOIN ON
A1.B = B1.B
AND A1.C = B1.C
AND (
CertainConditions = 'false'
OR (SOME_CLAUSE1 AND SOME_CLAUSE2)
)
(在OP更新后,从ON子句开始):
on Onyx.iownerid = mscrm.fi_id.search
AND onyx.question = mscrm.question
AND (
onyx.questiontype NOT IN (1,2)
OR (
(onyx.questiontype=2 AND onyx.response = mscrm.answer)
OR (onyx.questiontype=1 AND onyx.response=(
SELECT TOP 1
vchparameterdesc
FROM db..referenceparameters
WHERE iparameterid=mscrm.answer
)
)
)
)
哦,顺便说一句,上面的代码假定所有列都不可以为NULL。 如果可以,您还需要处理NULL的可能性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.