我需要使用生成的欄位將一個表拉為左連接或外部應用。右表有一個欄位 pnlNumber,它是左表中 2 個不同欄位的連接。因此,我首先必須使用左表中的 DeptCode 和 EmpNumber 將 pnlNumber 放在一起。然后,該欄位用于鏈接到我嘗試使用帶有左連接的 cte 以及使用外部應用的人員表。在這兩種情況下,生成的 pnlNumber 都是無效欄位。對另一種方式有什么建議嗎?
相關的表資訊如下所示:
Employee Table (Left Table):
DeptCode int,
EmpNumber int
Personnel Table (Right Table):
pnlNumber nvarchar(7),
Area nvarchar(25)
這是兩次嘗試的sql:
with cte as(
select right( '00' rtrim( convert(char(2), emp.DeptCode) ), 2 )
right( '00000' rtrim( convert(char(5), emp.EmpNumber) ), 5 ) as pnlNumber
from RDB..Employees as emp
)
select cte.pnlNumber, pnl.Area
from cte
left join
THRDB..Personnel as pnl
on cte.pnlNumber = pnl.pnlNumber
select RIGHT(('00' RTRIM(CONVERT(CHAR(2), emp.DeptCode))), 2)
RIGHT(('00000' RTRIM(CONVERT(CHAR(5), emp.EmpNumber))), 5) AS pnlNumber,
comb.Area
from RDB..Employees as emp
outer apply(
select pnlNumber, Area
from THRDB..Personnel
) as comb
where comb.pnlNumber = emp.pnlNumber
uj5u.com熱心網友回復:
看來您實際上并沒有從Employees表中選擇列,因此您應該能夠Personnel使用存在條件進行選擇:
select pnlNumber, Area
from THRDB.dbo.Personnel p
where exists (
select * from RDB.dbo.Employees e
where Right(('00' RTrim(Convert(char(2), emp.DeptCode))), 2)
Right(('00000' RTrim(Convert(char(5), emp.EmpNumber))), 5)
= p.pnlNumber
);
如果您確實想從兩個表中選擇列,您可以使用它apply(values(<your computed column>))來實作Employees.pnlNumber,例如:
select e.<columns>, p.<columns>
from RDB.dbo.Employees e
cross apply(
values(Right(('00' RTrim(Convert(char(2), e.DeptCode))), 2)
Right(('00000' RTrim(Convert(char(5), e.EmpNumber))), 5))
)v(pnlNumber)
left join THRDB.dbo.Personnel p on p.pnlNumber = v.pnlNumber;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/492727.html
標籤:tsql
