Sql 请帮助加入-案例字段的哪个位置?

Sql 请帮助加入-案例字段的哪个位置?,sql,join,Sql,Join,tblSource-具有ActionID、SourceName和SourceID tblX-具有ActionCode和SourceName lkuActionCode-两者都有 我还需要这个案例,因为tblX中的动作码与lkuActionCode中的动作码不同 我正在尝试在一个查询中显示来自tblX的SourceID、ActionID和其他所有内容 现在我得到一个错误:无效的列名“newAction2”。在最后一行。。。请帮忙 select t2.Sourceid, t1.actionCode

tblSource-具有ActionID、SourceName和SourceID tblX-具有ActionCode和SourceName lkuActionCode-两者都有

我还需要这个案例,因为tblX中的动作码与lkuActionCode中的动作码不同

我正在尝试在一个查询中显示来自tblX的SourceID、ActionID和其他所有内容

现在我得到一个错误:无效的列名“newAction2”。在最后一行。。。请帮忙

select  t2.Sourceid, t1.actionCode , t3.ActionID
CASE   
WHEN  t1.actionCode  = 'R' THEN 'N' END AS newAction2
from tblSource t2 
right join  tblX t1 on t1.SourceName= t2.SourceName
right join lkuActionCode t3 on t3.actioncode = newAction2
然而,为了避免以后的混淆,通常最好使用左连接。或者你甚至需要外部连接

select
    t2.Sourceid, t1.actionCode , t3.ActionID,
    CASE WHEN t1.actionCode  = 'R' THEN 'N' END AS newAction2
from
    lkuActionCode t3
    LEFT JOIN
    tblX t1 on t3.actioncode = CASE WHEN 1.actionCode  = 'R' THEN 'N' END
    LEFT JOIN
    tblSource t2 t1.SourceName= t2.SourceName
然而,为了避免以后的混淆,通常最好使用左连接。或者你甚至需要外部连接

select
    t2.Sourceid, t1.actionCode , t3.ActionID,
    CASE WHEN t1.actionCode  = 'R' THEN 'N' END AS newAction2
from
    lkuActionCode t3
    LEFT JOIN
    tblX t1 on t3.actioncode = CASE WHEN 1.actionCode  = 'R' THEN 'N' END
    LEFT JOIN
    tblSource t2 t1.SourceName= t2.SourceName

不能在join语句中引用newAction2。尝试在联接中重复此情况,如下所示:

select 
   t2.Sourceid
  ,t1.actionCode
  ,t3.ActionID
  CASE   
    WHEN t1.actionCode = 'R' THEN 'N'
  END AS newAction2
from tblSource t2 
right join tblX t1
  on t1.SourceName= t2.SourceName
right join lkuActionCode t3
  on t3.actioncode = CASE   
    WHEN t1.actionCode = 'R' THEN 'N'
  END
你想让不是R的动作码不经修改就通过吗?如果是:

select 
   t2.Sourceid
  ,t1.actionCode
  ,t3.ActionID
  CASE   
    WHEN t1.actionCode = 'R' THEN 'N'
    ELSE t1.actionCode
  END AS newAction2
from tblSource t2 
right join tblX t1
  on t1.SourceName= t2.SourceName
right join lkuActionCode t3
  on t3.actioncode = CASE   
    WHEN t1.actionCode = 'R' THEN 'N'
    ELSE t1.actionCode
  END
您还可以使用子查询只生成一次case语句:

 select 
   t2.Sourceid
  ,t1.actionCode
  ,t3.ActionID
  ,fixedActionCode.actionCode
from tblSource t2 
right join tblX t1
  on t1.SourceName= t2.SourceName
right join (
  SELECT
     CASE
       WHEN t1.actionCode = 'R' THEN 'N'
       ELSE t1.actionCode
     END as actionCode
    ,otherField1
    ,otherField2  
  FROM lkuActionCode     
) as fixedActionCode
  on t3.actioncode = fixedActionCode.actionCode

不能在join语句中引用newAction2。尝试在联接中重复此情况,如下所示:

select 
   t2.Sourceid
  ,t1.actionCode
  ,t3.ActionID
  CASE   
    WHEN t1.actionCode = 'R' THEN 'N'
  END AS newAction2
from tblSource t2 
right join tblX t1
  on t1.SourceName= t2.SourceName
right join lkuActionCode t3
  on t3.actioncode = CASE   
    WHEN t1.actionCode = 'R' THEN 'N'
  END
你想让不是R的动作码不经修改就通过吗?如果是:

select 
   t2.Sourceid
  ,t1.actionCode
  ,t3.ActionID
  CASE   
    WHEN t1.actionCode = 'R' THEN 'N'
    ELSE t1.actionCode
  END AS newAction2
from tblSource t2 
right join tblX t1
  on t1.SourceName= t2.SourceName
right join lkuActionCode t3
  on t3.actioncode = CASE   
    WHEN t1.actionCode = 'R' THEN 'N'
    ELSE t1.actionCode
  END
您还可以使用子查询只生成一次case语句:

 select 
   t2.Sourceid
  ,t1.actionCode
  ,t3.ActionID
  ,fixedActionCode.actionCode
from tblSource t2 
right join tblX t1
  on t1.SourceName= t2.SourceName
right join (
  SELECT
     CASE
       WHEN t1.actionCode = 'R' THEN 'N'
       ELSE t1.actionCode
     END as actionCode
    ,otherField1
    ,otherField2  
  FROM lkuActionCode     
) as fixedActionCode
  on t3.actioncode = fixedActionCode.actionCode

如果只是映射一个值,则可以创建联接表达式

  ON t3.actioncode = 'N' 
   AND t1.actionCode = 'R'

如果只是映射一个值,则可以创建联接表达式

  ON t3.actioncode = 'N' 
   AND t1.actionCode = 'R'

哈,是的。谢谢你的接球。哈,是的。谢谢你的理解。你的第一个例子非常有效。但是我的lkuActionCodes中的一些操作代码没有显示在tblSource上。。。现在我得到了5条额外的空记录,这些操作代码,我怎么能只显示那些确实存在于tblSource中的记录呢?@xrum:remove“RIGHT”from join您的第一个示例非常有效。但是我的lkuActionCodes中的一些操作代码没有显示在tblSource上。。。现在我得到了5条额外的空记录和这些操作代码,我怎么能只显示那些确实存在于tblSource中的记录呢?@xrum:从连接中删除“RIGHT”