Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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 Server:使用ROW\ U NUMBER和CASE语句选择行_Sql_Sql Server_Sql Order By_Case_Row Number - Fatal编程技术网

SQL Server:使用ROW\ U NUMBER和CASE语句选择行

SQL Server:使用ROW\ U NUMBER和CASE语句选择行,sql,sql-server,sql-order-by,case,row-number,Sql,Sql Server,Sql Order By,Case,Row Number,我得到了一个子表数据,如下所示: Id Cust_id Item_Id Inactivated_On Updated_on Ans ----------------------------------------------------------------------- 15 123 541 2014-05-18 08:44:00 2014-05-18 08:44:00 true 16 123 541 2014-

我得到了一个子表数据,如下所示:

Id  Cust_id Item_Id  Inactivated_On       Updated_on           Ans
-----------------------------------------------------------------------
15    123     541    2014-05-18 08:44:00  2014-05-18 08:44:00  true
16    123     541    2014-05-18 08:44:00  2014-05-18 08:44:00  123
11    123     541    NULL                 2014-05-18 08:44:00  NULL
12    123     541    2014-05-18 08:44:00  2014-05-18 08:44:00  NULL
13    123     541    2014-05-18 08:44:00  2014-05-18 08:44:00  false
6     123     541    NULL                 2014-05-18 08:44:00  NULL
7     123     541    NULL                 2014-05-18 08:44:00  NULL
15    123     541    NULL                 2014-05-18 08:44:00  false
Id   Parent_Id   Type_Id
-------------------------
15    NULL        1
16    15          2
11    NULL        2
12    11          2
13    11          1
 6     NULL        2
 7     6           2
和父表如下所示:

Id  Cust_id Item_Id  Inactivated_On       Updated_on           Ans
-----------------------------------------------------------------------
15    123     541    2014-05-18 08:44:00  2014-05-18 08:44:00  true
16    123     541    2014-05-18 08:44:00  2014-05-18 08:44:00  123
11    123     541    NULL                 2014-05-18 08:44:00  NULL
12    123     541    2014-05-18 08:44:00  2014-05-18 08:44:00  NULL
13    123     541    2014-05-18 08:44:00  2014-05-18 08:44:00  false
6     123     541    NULL                 2014-05-18 08:44:00  NULL
7     123     541    NULL                 2014-05-18 08:44:00  NULL
15    123     541    NULL                 2014-05-18 08:44:00  false
Id   Parent_Id   Type_Id
-------------------------
15    NULL        1
16    15          2
11    NULL        2
12    11          2
13    11          1
 6     NULL        2
 7     6           2
现在,我试图根据DESC上更新的_,在Child Id的(16、12、13、7)行的前1行中仅获取非激活的_,因为存在重复的Id。结果也需要检查

  • 案例1:如果父Id的类型_Id=2,则禁用的_On为NULL,并且
  • 案例2:当父Id的类型_Id=1时,则未激活的_On为NULL,并且给定数据不应将父Ans值设置为“false”
  • 案例3:当子行和父行未激活的_On为空时,则从最终结果集中排除
我的最终预期结果应该是:

 Id  Cust_id Item_Id  Inactivated_On       Updated_on           Ans
 -------------------------------------------------------------------
 12    123     541    2014-05-18 08:44:00  2014-05-18 08:44:00  NULL
 13    123     541    2014-05-18 08:44:00  2014-05-18 08:44:00  false
我尝试过的查询是:

 SELECT 
     CH.Id,
     CH.Cust_id, 
     CH.Item_Id,  
     CH.Inactivated_On,       
     CH.Updated_on,           
     CH.Ans,
     CH.RN
     (SELECT 
          ROW_NUMBER() OVER (PARTITION BY CT.Item_Id, CT.Id ORDER BY CT.Updated_on DESC) AS RN,
          CT.Id,
          CT.Cust_id, 
          CT.Item_Id,  
          CT.Inactivated_On,       
          CT.Updated_on,           
          CT.Ans
      FROM 
          CHILD_TBL AS CT
      INNER JOIN 
          PARENT_TBL AS PT ON PT.Id = CT.Id
      WHERE 
          PT.Parent_Id IS NULL
          CT.Inactivated_On IS NOT NULL -- FOR CASE 3 FILTERING
          AND CT.Cust_id = 123
          AND CT.Item_Id = 541) AS CH
WHERE 
    CH.RN = 1

我正在寻找一个查询以使案例1和2正常工作。非常感谢您的帮助。

按从分区中删除ct.id,并按项目顺序将ct.cust\u id放入分区中

SELECT CH.Id,
  CH.Cust_id, 
  CH.Item_Id,  
  CH.Inactivated_On,       
  CH.Updated_on,           
  CH.Ans
  (SELECT ROW_NUMBER() OVER (PARTITION BY CT.Item_Id, CT.cust_id ORDER BY 
   CT.Updated_on DESC) AS RN,
   CT.Id,
   CT.Cust_id, 
   CT.Item_Id,  
   CT.Inactivated_On,       
   CT.Updated_on,           
   CT.Ans
   FROM CHILD_TBL AS CT
   INNER JOIN PARENT_TBL AS PT ON PT.Id = CT.Id
   WHERE PT.Parent_Id IS NULL
   AND CT.Cust_id = 123
    AND CT.Item_Id = 541
   ) AS CHLD
  WHERE CH.RN = 1

你失去了我在“7”被灭活。我不明白。@GordonLinoff我想我忘了添加另一个案例,当子行和父行的unactivated_On为NULL时,则从最终结果集中排除。还有更新的问题。在这个场景中有人能帮我吗?我非常需要它。我提供的数据只是其中的一部分,所以我需要按ct.id进行分区,以便执行进一步的操作。任何帮助,以上似乎对我不起作用