在SQL Server中使用CASE与JOIN语句。

问题描述 投票:2回答:1

我有一个从几个表中选择数据的要求。第一个表包含两列 Paid FromPayer Code. 视情况而定 Paid From,我必须返回要么 Student Name (来自学生表)或 Employee Name (来自雇员表)或 Account Name (来自账户表)。截至目前,我用了一个case表达式,在一个 SELECT 查询。我想知道,是否可以在一个 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
sql-server sql-server-2008 left-join case
1个回答
4
投票

试试这样的方法

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 

注意事项 考虑改变你的数据库结构

© www.soinside.com 2019 - 2024. All rights reserved.