2012-02-20 1 views
0

Я написал соединение в некоторых таблицах, и я заказал данные, используя два уровня упорядочения - один из которых является первичным ключом одной таблицы.Использование Order By с отличием в соединении (PLSQL)

Теперь, когда эти данные отсортированы, я хочу, чтобы исключить любые дубликаты из моих данных, используя строковое представление и предложение DISTINCT, - и именно здесь я буду отклеиваться.

Кажется, что я могу либо сортировать данные, либо различать их, но никогда в обоих случаях. Есть ли способ обойти это или я наткнулся на эквивалент SQL принципа неопределенности?

Этот код возвращает данные упорядоченный, но с дублями

   SELECT 
        ada.source_tab source_tab 
        , ada.source_col source_col 
        , ada.source_value source_value 
        , ada.ada_id ada_id 
       FROM 
        are_aud_data ada 
        , are_aud_exec_checks aec 
        , are_audit_elements ael 
       WHERE 
         aec.aec_id = ada.aec_id 
        AND ael.ano_id = aec.ano_id 
        AND aec.acn_id = 123456 
        AND ael.ael_type = 1 
       ORDER BY 
        CASE 
        WHEN source_tab = 'Tab type 1' THEN 1 
        WHEN source_tab = 'Tab type 2' THEN 2 
        ELSE 3 
        END 
       ,ada.ada_id ASC; 

Этот код удаляет дубликаты, но я теряю заказ ...

SELECT DISTINCT source_tab, source_col, source_value FROM (
       SELECT 
        ada.source_tab 
        , ada.source_col source_col 
        , ada.source_value source_value 
        , ada.ada_id ada_id 
       FROM 
        are_aud_data ada 
        , are_aud_exec_checks aec 
        , are_audit_elements ael 
       WHERE 
         aec.aec_id = ada.aec_id 
        AND ael.ano_id = aec.ano_id 
        AND aec.acn_id = 123456 
        AND ael.ael_type = 1 
       ORDER BY 
        CASE 
        WHEN source_tab = 'Tab type 1' THEN 1 
        WHEN source_tab = 'Tab type 2' THEN 2 
        ELSE 3 
        END 
       ,ada.ada_id ASC 
    ) 
; 

Если я пытаюсь включить «ORDER BY ada_id 'в конце внешнего выбора, я получаю сообщение об ошибке «ORA-01791: не ВЫБРАННОЕ выражение», которое бесит меня!

ответ

0

Почему вы не включаете ada_id в выбранные поля внешнего запроса?

+0

ada_id - это первичный ключ, поэтому каждая запись уникальна (это аннулирует мое предложение DISTINCT). Я бы подумал, что я могу включить «ORDER BY ada_id» во внешний запрос, но, как я говорю, он возвращает ошибку: S – TommyWylde

0
;WITH CTE AS 
(
        SELECT 
        ada.source_tab source_tab 
        , ada.source_col source_col 
        , ada.source_value source_value 
        , ada.ada_id ada_id 
        , ROW_NUMBER() OVER (PARTITION BY [COLUMNS_YOU_WANT TO BE DISTINCT] 
        ORDER BY [your_columns]) rn 
       FROM 
        are_aud_data ada 
        , are_aud_exec_checks aec 
        , are_audit_elements ael 
       WHERE 
         aec.aec_id = ada.aec_id 
        AND ael.ano_id = aec.ano_id 
        AND aec.acn_id = 356441 
        AND ael.ael_type = 1 
       ORDER BY 
        CASE 
        WHEN source_tab = 'Licensed Inventory' THEN 1 
        WHEN source_tab = 'CMDB'    THEN 2 
        ELSE 3 
        END 
       ,ada.ada_id ASC 
) 
select * from CTE WHERE rn<2 
0

Кажется, что ada_id не имеет смысла во внешнем запросе. , вы удалили все эти значения, чтобы свернуть его до отдельных исходных файлов и исходных текстов ...

что бы вы ожидали от заказа?

вы хотите, возможно, минимальную ada_id для каждой таблицы и набором столбцов быть водителем для заказа - (хотя имя таблицы представляется целесообразным для меня)

включает минимальный ada_id во внутреннем запросе (вы будете требуется предложение group by) , затем укажите, что во внешнем запросе и сортировка по нему.

 Смежные вопросы

  • Нет связанных вопросов^_^