2015-12-28 3 views
2

У меня есть требование выбрать несколько данных из нескольких таблиц. Первая таблица содержит два столбца Paid From и Payer Code. В зависимости от Платного Отказа, я должен вернуть либо имя студента (из таблицы учеников), либо имя сотрудника (из таблицы сотрудников) или имя учетной записи (из таблицы счетов). Начиная с Now, я использовал оператор case в SELECT Query. Я хотел знать, можно ли это сделать в ЛЕВОЙ ВСТУПЛЕНИИ. Пожалуйста помоги!Как использовать CASE с операторами JOIN в SQL Server

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 
+0

Я предпочитаю СЛУЧАЙ вместо LEFT JOIN. Вы можете удалить первый вложенный SELECT –

ответ

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 

Примечание: следует изменить структуру базы данных