У меня есть таблица, настроенная так, что один столбец (атрибут) содержит такую информацию, как имя, фамилия, номер учетной записи и любую другую информацию, связанную с вещью в базе данных. Другой столбец (attributeType) содержит число, указывающее, что такое атрибут, например. 1 может быть именем, 2 фамилией и 3 номером счета и т. д. Существует еще один столбец (конечная дата), указывающий, является ли запись текущей, имея там дату. Обычно он будет установлен на 9999 год, если текущий, и на некоторую дату в прошлом в противном случае. Все данные, описывающие одно и то же, имеют уникальное значение и в другом столбце (объекте), так что каждая запись с одним и тем же номером в столбце объекта будет описывать одного человека. Например.
entity attribute attributetype enddate
------ --------- ------------- --------
1 ben 1 9999-1-1
1 alt 2 9999-1-1
1 12345 3 9999-1-1
2 sam 1 9999-1-1
2 smith 2 9999-1-1
2 98765 3 1981-1-1
Я хочу выбрать человека из приведенной выше таблицы с конкретным именем и фамилией, где имя будет текущим, но не выводить номер счета, если это не так. Предполагая, что таблица называется tblAccount, я делаю следующее для части имени:
select ta1.attribute '1st Name', ta2.attribute 'last name'
from tblAccount ta1
inner join tblAccount ta2 on ta1.entity = ta2.entity
where ta1.attribute = 'sam' and ta2.attribute = 'smith'
and ta1.attributetype = 1 and ta2. attributetype = 2
and ta1.enddate > getdate() and ta2.enddate > getdate()
и он выводит имя и фамилию, как и ожидалось, но когда я хочу включить столбец номера счета, я ничего не получаю:
select ta1.attribute '1st Name', ta2.attribute 'last name', ta3.attribute 'account#'
from tblAccount ta1
inner join tblAccount ta2 on ta1.entity = ta2.entity
left join tblAccount ta3 on ta1.entity = ta3.entity
where ta1.attribute = 'sam' and ta2.attribute = 'smith'
and ta1.attributetype = 1 and ta2. attributetype = 2
and ta1.enddate > getdate() and ta2.enddate > getdate()
and ta3.attributetype = 3 and ta3.enddate > getdate()
То, что я хотел бы видеть, это вывод имени и фамилии без ничего в столбце account# в приведенном выше случае, когда он не является текущим. Что я делаю не так и как исправить этот запрос?
where
для ta3, это также может бытьinner join
. - person Jeff Rosenberg   schedule 07.03.2013