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

Тема в разделе "SQL", создана пользователем SeverBap, 9 июл 2009.

  1. SeverBap

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    Есть таблица employee с столбцами hire_date, first_name, Last_name
    нужно вывести пары по hire_date;
    как это сделать я незнаю
    работаю в firebird!!!!

    Код (Text):
    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
    все выводит но не красиво!! ;)
     
  2. etc

    etc Гость

    В красный покрасте, красивее будет.
     
  3. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Данная выборка будет выбирать каждую пару два раза в комбинациях 1-2 и 2-1.
    Нужно каким-нибудь образом привязываться к номеру строки.
     
  4. SeverBap

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    как надо тогда?
     
  5. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Предлагаю такое решение: (сразу скажу, что точный синтаксис файербёрда я не знаю, поэтому код пишу синтаксисом ORACLE-а)

    1. Создать таблицу (TMP_TABLE), которая будет содержать поля из employee и ещё одно доп. поле, например thisRecordNumber.
    Перед каждой операцией выбора пар эту таблицу нужно будет очищать.
    2. Выполнить приблизительно такой скриптик:
    Код (Text):
    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. Делаем выборку пар из временной таблицы:
    Код (Text):
     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;
    В данной выборке для текущей записи будет выбираться только та парная запись, которая стоит после текущей.

    Вот такое решение.
     
Загрузка...

Поделиться этой страницей