Pregunta

He escrito una unión en algunas tablas y he ordenado los datos utilizando dos niveles de pedido, uno de los cuales es la clave principal de una tabla.

Ahora, con estos datos ordenados, quiero excluir cualquier duplicado de mis datos utilizando una vista en línea y la cláusula distinta, y aquí es donde me estoy despegando.

Parece que puedo clasificar los datos o distintos, pero nunca al mismo tiempo. ¿Hay alguna manera de evitar esto o me he topado con el equivalente SQL del principio de incertidumbre?

Este código devuelve los datos ordenados, pero con duplicados

                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;

Este código elimina los duplicados, pero pierdo el pedido ...

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
     )
;

Si intento incluir 'Order by ADA_ID' al final de la selección externa, recibo el mensaje de error 'ORA-01791: ¡No una expresión seleccionada' que me está enfureciendo!

No hay solución correcta

Otros consejos

¿Por qué no incluyes ada_id ¿En los campos seleccionados de la consulta externa?

;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

Parece que el ADA_ID no tiene sentido en la consulta externa. Has eliminado todos esos valores para reducirlo a Distint Source_tab y Source_col ...

¿Qué esperarías que sea la orden?

Desea que quizás el mínimo de ADA_ID para cada tabla y columna se ajuste al controlador para el pedido, (aunque el nombre de la tabla me parece apropiado)

Incluya el mínimo de ADA_ID en la consulta interna (necesitará un grupo por cláusula) y luego haga referencia a eso en la consulta externa y ordene en ella.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top