在 SQL 服务器中使用 CASE 和 JOIN 语句
Use CASE with JOIN Statements in SQL Server
我需要 select 来自几个 table 的数据。第一个 table 包含两列 Paid From
和 Payer Code
。根据 Paid From
,我必须 return Student Name
(来自学生 Table)或 Employee Name
(来自员工 Table)或 Account Name
(来自帐户 Table)。截至目前,我在 SELECT
查询中使用了 case 表达式。我想知道是否可以在 LEFT JOIN
.
中这样做
SELECT RV.PayerCode ,
( SELECT CASE WHEN PaidFrom = 1
THEN ( SELECT FullName
FROM Students
WHERE StudentID = RV.PayerCode
)
WHEN paidFrom = 2
THEN ( SELECT AccountName
FROM Accounts
WHERE AccountNumber = RV.PayerCode
)
WHEN paidfrom = 3 THEN ''
WHEN paidFrom = 4
THEN ( SELECT EmployeeName
FROM Employee
WHERE EmployeeID = RV.PayerCode
)
END
) AS PayerName
FROM dbo.Finance RV
尝试这样的事情
SELECT RV.PayerCode,
CASE
WHEN RV.paidfrom = 3 THEN ''
ELSE COALESCE(s.FullName, a.AccountName, e.EmployeeName)
END PayerName,
FROM dbo.Finance RV
LEFT OUTER JOIN dbo.Students s
ON s.StudentID = RV.PayerCode
AND RV.PaidFrom = 1
LEFT OUTER JOIN dbo.Accounts a
ON a.AccountNumber = RV.PayerCode
AND RV.PaidFrom = 2
LEFT OUTER JOIN dbo.Employee e
ON e.EmployeeID = RV.PayerCode
AND RV.PaidFrom = 4
注意:考虑更改数据库结构
我需要 select 来自几个 table 的数据。第一个 table 包含两列 Paid From
和 Payer Code
。根据 Paid From
,我必须 return Student Name
(来自学生 Table)或 Employee Name
(来自员工 Table)或 Account Name
(来自帐户 Table)。截至目前,我在 SELECT
查询中使用了 case 表达式。我想知道是否可以在 LEFT JOIN
.
SELECT RV.PayerCode ,
( SELECT CASE WHEN PaidFrom = 1
THEN ( SELECT FullName
FROM Students
WHERE StudentID = RV.PayerCode
)
WHEN paidFrom = 2
THEN ( SELECT AccountName
FROM Accounts
WHERE AccountNumber = RV.PayerCode
)
WHEN paidfrom = 3 THEN ''
WHEN paidFrom = 4
THEN ( SELECT EmployeeName
FROM Employee
WHERE EmployeeID = RV.PayerCode
)
END
) AS PayerName
FROM dbo.Finance RV
尝试这样的事情
SELECT RV.PayerCode,
CASE
WHEN RV.paidfrom = 3 THEN ''
ELSE COALESCE(s.FullName, a.AccountName, e.EmployeeName)
END PayerName,
FROM dbo.Finance RV
LEFT OUTER JOIN dbo.Students s
ON s.StudentID = RV.PayerCode
AND RV.PaidFrom = 1
LEFT OUTER JOIN dbo.Accounts a
ON a.AccountNumber = RV.PayerCode
AND RV.PaidFrom = 2
LEFT OUTER JOIN dbo.Employee e
ON e.EmployeeID = RV.PayerCode
AND RV.PaidFrom = 4
注意:考虑更改数据库结构