Выберите строки в зависимости от значения поля - PullRequest
0 голосов
/ 26 апреля 2011

У меня есть 2 таблицы: Сотрудник и назначения.

1 Сотрудник может иметь несколько назначений.Есть поле: Visibility, которое может содержать 0, 1 или 2.

  0: show any of the appointment, 
  1: Show this appointment only, 
  2: Don't show the appointment. 

Теперь я хочу выбрать записи о сотрудниках и встречах:

  1. , если видимость равна 1, товыберите эту запись, а не любые другие записи
  2. , если видимость равна 0, затем выберите просто запись, например, верхнюю 1
  3. , если видимость равна 2, затем выберите пустые значения для этой записи, кроме идентификатора сотрудника.

Может кто-нибудь указать мне, как это можно сделать с помощью Sql Server 2000?

Ответы [ 3 ]

0 голосов
/ 26 апреля 2011
select *
from Employee as Emp
  left outer join
    (select top 1 *
     from Appointments
     where Visibility <> 2
     order by Visibility desc) as App
  on Emp.EmpID = App.EmpID    
0 голосов
/ 26 апреля 2011

Я делаю пару предположений.

  1. Возможно иметь более одной встречи
  2. Если у вас назначены встречи с 1 и 0, вы хотите гарантировать, что показывается тот, у кого 1
  3. Вы можете иметь только одну запись с 1

    SELECT
        e.empid,
        COALESCE(OneAppoint.appointmentID, ZeroAppoint.appointmentID) appointmentID
    FROM
        employee e
        LEFT JOIN appointment ZeroAppoint
            INNER JOIN (
            SELECT
                max(a.appointmentid) appointmentid ,
            a.EmpID    
            FROM
                appointment a
            WHERE
                a.Visibility =0 
    
                ) maxZeroAppoint
            ON ZeroAppoint.appointmentid = maxZeroAppoint.appointmentid
        ON e.empID = ZeroAppoint.empID
        LEFT JOIN appointment OneAppoint
        ON e.empID = OneAppoint.empID 
            and OneAppoint.Visibility = 1
    
0 голосов
/ 26 апреля 2011
With SelectedAppointments AS
{
   SELECT * FROM Appointments WHERE Visibility <> 2 
}

SELECT  Employee.Id, < All columns of SelectedAppointments unless EmployeeId> 
   FROM Employee LEFT JOIN SelectedAppointments   
   on Employee.Id = SelectedAppointments.EmployeeId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...