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