Простой запрос

SeverBap

Well-known member
18.09.2007
451
0
#1
Есть таблица employee с столбцами hire_date, first_name, Last_name
нужно вывести пары по hire_date;
как это сделать я незнаю
работаю в firebird!!!!

Код:
Select first.hire_date, fin.hire_date, first.first_name,first.Last_name
from employee first, employee Fin
where first.hire_date=fin.hire_date and first.first_name<>Fin.first_name
все выводит но не красиво!! ;)
 

Over

Well-known member
04.07.2007
116
0
#3
Данная выборка будет выбирать каждую пару два раза в комбинациях 1-2 и 2-1.
Нужно каким-нибудь образом привязываться к номеру строки.
 

Over

Well-known member
04.07.2007
116
0
#5
Предлагаю такое решение: (сразу скажу, что точный синтаксис файербёрда я не знаю, поэтому код пишу синтаксисом ORACLE-а)

1. Создать таблицу (TMP_TABLE), которая будет содержать поля из employee и ещё одно доп. поле, например thisRecordNumber.
Перед каждой операцией выбора пар эту таблицу нужно будет очищать.
2. Выполнить приблизительно такой скриптик:
Код:
DECLARE counter integer;
begin
counter := 1;
FOR i in (SELECT * FROM employee)
loop
INSERT INTO TMP_TABLE
VALUES (i.first_name, i.last_name, i.hire_date, counter);
counter := counter + 1;	 
end loop;
end;
Мы копируем все записи во временную таблицу и при этом нумеруем их.

3. Делаем выборку пар из временной таблицы:
Код:
 SELECT one.LastName, one.FirstName, two.LastName, two.FirstName, one.hire_date
FROM TMP_TABLE one, TMP_TABLE two
WHERE one.hire_date = two.hire_date
AND one.thisRecordNum < two.thisRecordNum;
В данной выборке для текущей записи будет выбираться только та парная запись, которая стоит после текущей.

Вот такое решение.