Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在联接上使用Order By和Distinct(PLSQL)_Sql_Sql Order By_Distinct_Inline View - Fatal编程技术网

在联接上使用Order By和Distinct(PLSQL)

在联接上使用Order By和Distinct(PLSQL),sql,sql-order-by,distinct,inline-view,Sql,Sql Order By,Distinct,Inline View,我在一些表上编写了一个连接,并使用两个级别的排序对数据进行排序,其中一个级别是一个表的主键 现在,对这些数据进行排序后,我想使用一个内嵌视图和DISTINCT子句从数据中排除任何重复项,这就是我要解决的问题 我似乎能够对数据进行排序或区分数据,但决不能同时对两者进行排序。有没有办法解决这个问题,或者我是否偶然发现了与不确定性原理类似的SQL 此代码返回已排序的数据,但包含重复项 SELECT ada.source_tab

我在一些表上编写了一个连接,并使用两个级别的排序对数据进行排序,其中一个级别是一个表的主键

现在,对这些数据进行排序后,我想使用一个内嵌视图和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:非所选表达式”,这让我很恼火

为什么不在外部查询的选定字段中包含ada\u id?

看起来ada\u id在外部查询中没有意义。
;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
您已经删除了所有这些值,将其归结为不同的source_选项卡和source_col

您希望订单是什么

您可能希望每个表和列集的最小ada_id成为订单的驱动程序-尽管表名对我来说似乎合适

在需要GROUPBY子句的内部查询中包含最小ada_id
然后在外部查询中引用它并对其进行排序。

ada_id是主键,因此每个记录都是唯一的,这将使我的DISTINCT子句无效。我本以为可以在外部查询中包含orderbyada_id,但正如我所说的,它返回一个错误:S