繁体   English   中英

在多个条件下使用多个case语句进行联接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM