在SQL Server 2012中的INNER JOIN语句中使用Case语句中的结果

时间:2014-08-18 18:11:56

标签: sql-server join case alias

以下是我的疑问:

SELECT 
        U.Part
       ,U.EndDate
       ,F.Part
       ,F.EndDate
       ,(U.Calc1/(CASE F.Calc2 WHEN 0 THEN .00000001 ELSE F.Calc2 END)) AS PercentRepaired
       ,(1-(U.Calc1/(CASE F.Calc2 WHEN 0 THEN .00000001 ELSE F.Calc2 END))) AS PercentNoFault
       ,NF.*
       ,R.* 
FROM 
       RCCalc1Part U
INNER JOIN 
       RCCalc2Part F
ON 
       U.Part = F.Part AND U.EndDate = F.EndDate 
INNER JOIN RCNF NF
ON     Part = LEFT(NF.Part,7)
INNER JOIN Repair R
ON
        NF.Part = (CASE LEFT(NF.Part,7) WHEN '2000000' THEN CONCAT(R.Part,'-',LEFT(R.ExtendedPart,1)) ELSE NF.Part END)
ORDER BY 
       U.SN ASC, NF.Part ASC, U.EndDate ASC

以下是我关注的INNER JOIN:

INNER JOIN Repair R
ON
        NF.Part = (CASE LEFT(NF.Part,7) WHEN '2000000' THEN CONCAT(R.Part,'-',LEFT(R.ExtendedPart,1)) ELSE NF.Part END)

我正在尝试使用调试器来查找=右侧的值。它似乎没有做我想做的事情。当NF。部分= 2000000然后我想要CONCAT R.Part并希望该连接成为=右侧的值。

我这样做了吗?如果不是......我离开了吗?

感谢。

1 个答案:

答案 0 :(得分:0)

INNER JOIN Repair R ON NF.Part = (CASE LEFT(NF.Part,7) WHEN '2000000' THEN CONCAT(R.Part,'-',LEFT(R.ExtendedPart,1)) ELSE R.Part END)正是我要找的......除了else语句后的列,一切都是正确的。