Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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
如何在数据子集上运行SQL代码(按分组而不聚合)_Sql_Oracle_Group By_Data Conversion - Fatal编程技术网

如何在数据子集上运行SQL代码(按分组而不聚合)

如何在数据子集上运行SQL代码(按分组而不聚合),sql,oracle,group-by,data-conversion,Sql,Oracle,Group By,Data Conversion,我正在做一些数据转换,我需要对我的数据进行分组,并对每个分组执行一些逻辑代码。对于下面的示例,我希望按客户名称和客户ID进行分组,并且每当此组包含源系统(如SAP)时,我都希望保留该行,而不是其他行。我一直在使用分区上的row_number()对数据进行分组,但我发现很难完成我需要做的事情,除非我可以在分组的基础上运行一些逻辑。任何帮助都将不胜感激 Source System Customer_ID Customer_Name Survivor --------------------

我正在做一些数据转换,我需要对我的数据进行分组,并对每个分组执行一些逻辑代码。对于下面的示例,我希望按客户名称和客户ID进行分组,并且每当此组包含源系统(如SAP)时,我都希望保留该行,而不是其他行。我一直在使用分区上的row_number()对数据进行分组,但我发现很难完成我需要做的事情,除非我可以在分组的基础上运行一些逻辑。任何帮助都将不胜感激

Source System    Customer_ID  Customer_Name Survivor 
------------------------------------------------------ 
SAP              1               Walmart         Y  
Oracle           1               Walmart         N  
Oracle           1               Walmart         N  
Oracle           1               Walmart         N  
Oracle           2               Target          Y  
Oracle           2               Target          N  
Oracle           2               Target          N

以下内容与survivor的预期输出相匹配,但我不确定customer 2的逻辑,因为所有行似乎都相同:

SELECT  "Source System",
        "Customer ID",
        "Customer Name",
        CASE WHEN ROW_NUMBER() OVER(PARTITION BY "Customer ID" 
                                    ORDER BY CASE WHEN "Source System" = 'SAP' 
                                                THEN 0 
                                                ELSE 1 
                                            END)
                             = 1 THEN 'Y' ELSE 'N' END AS "Survivor"
FROM    T

您确定要在Oracle数据库上运行吗?哎呀,我指的是PL/SQL。更新标题。谢谢非常感谢!这正是我想要的。在我的示例中,客户2的逻辑不清楚,抱歉。