Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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 - Fatal编程技术网

Sql 在同一个表上分组和联接

Sql 在同一个表上分组和联接,sql,oracle,group-by,Sql,Oracle,Group By,我有一个包含以下记录的表 acct_id | org_id | terr_id | segment 4 -------------------------------------- 123 | A | 12345 | US 123 | A | 45678 | CA 456 | B | ABC | US 45

我有一个包含以下记录的表

         acct_id | org_id | terr_id | segment 4       
         --------------------------------------
         123     | A      | 12345   | US
         123     | A      | 45678   | CA
         456     | B      | ABC     | US
         456     | B      | XYZ     | US
我需要根据帐户id和组织id分组,并使用maxsegment 4获取记录。。在按分组时,我需要在group by中省略terr_id,并在关联的MAXSEMENT 4的输出中使用它。我怎样才能在不重新加入同一张表的情况下做到这一点

o/p需要修改

         acct_id | org_id | terr_id | segment 4       
         --------------------------------------
         123     | A      | 12345   | US
         456     | B      | ABC or XYZ  | US

对于maxsegment_4,可以使用具有分组依据的内部联接

  select acct_id , org_id , terr_id , segment_4
  from my_table m
  inner join (

      select acct_id, org_id, max(segment_4 ) as my_segment_4
      from my_table 
      group by acct_id, org_id 
  )  t o t.acct_id  = m.acct_id 
              and t.org_id = m.org_id 
                  and t.my_segment_4 = m.segment_4

对于maxsegment_4,可以使用具有分组依据的内部联接

  select acct_id , org_id , terr_id , segment_4
  from my_table m
  inner join (

      select acct_id, org_id, max(segment_4 ) as my_segment_4
      from my_table 
      group by acct_id, org_id 
  )  t o t.acct_id  = m.acct_id 
              and t.org_id = m.org_id 
                  and t.my_segment_4 = m.segment_4

您好,请编辑问题并添加您尝试过的内容。您好,请编辑问题并添加您尝试过的内容。您好,ScaisEdge-有没有一种方法可以在不重新加入同一个表的情况下完成此操作?据我所知,没有。。因为您需要与maxsegment_4相关的terr_id,为此,您需要对my_表进行单独访问。。如果您不想使用与maxsegment相关的terr_id,而想获得terr_id的聚合结果,您可以使用单一访问,例如:minHi ScaisEdge-如果存在多个terr_id用于帐户id、组织id和segment 4的组合,是否有办法仅获取一条记录?我无法理解您的问题。。因此,发布一个新的问题,并附上有效的数据样本和预期结果,并评论我新帖子的链接。。所以我可以试着回答希斯凯里奇-有没有一种方法可以让我不用回到同一张桌子上就可以做到这一点?就我所知,不是。。因为您需要与maxsegment_4相关的terr_id,为此,您需要对my_表进行单独访问。。如果您不想使用与maxsegment相关的terr_id,而想获得terr_id的聚合结果,您可以使用单一访问,例如:minHi ScaisEdge-如果存在多个terr_id用于帐户id、组织id和segment 4的组合,是否有办法仅获取一条记录?我无法理解您的问题。。因此,发布一个新的问题,并附上有效的数据样本和预期结果,并评论我新帖子的链接。。所以我可以试着回答