Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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/0/iphone/44.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 如何在oracle中使用Group By列出聚合值_Sql_Oracle_Group By - Fatal编程技术网

Sql 如何在oracle中使用Group By列出聚合值

Sql 如何在oracle中使用Group By列出聚合值,sql,oracle,group-by,Sql,Oracle,Group By,我有一个查询,它可以获取所有具有报表管理器的用户。我想按reporting manager电子邮件id将用户id分组为列表 SELECT q.USER_ID, q.REPORTS_TO, e.EMAIL FROM (SELECT a.USER_ID, a.REPORTS_TO, a.EMAIL FROM PortalX.PTX_USERS a LEFT OUTER JOIN PortalX.PTX_LDAP_USERS b

我有一个查询,它可以获取所有具有报表管理器的用户。我想按reporting manager电子邮件id将用户id分组为列表

SELECT q.USER_ID, q.REPORTS_TO, e.EMAIL
  FROM (SELECT a.USER_ID, a.REPORTS_TO, a.EMAIL
          FROM PortalX.PTX_USERS a
               LEFT OUTER JOIN PortalX.PTX_LDAP_USERS b
                  ON a.USER_ID = b.OWN_ID
         WHERE b.OWN_ID IS NULL) q
       INNER JOIN PortalX.PTX_USERS e ON q.REPORTS_TO = e.USER_ID;
我不太熟悉编写oracle查询。感谢您的帮助

编辑:

在@Barbaros的帮助下,最终查询将用户聚合为逗号分隔值列表

SELECT a.REPORTS_TO, a.EMAIL, 
       LISTAGG(a.USER_ID,',') WITHIN GROUP (ORDER BY a.USER_ID) as USERS
  FROM PortalX.PTX_USERS a
  LEFT JOIN PortalX.PTX_LDAP_USERS b
    ON a.USER_ID = b.OWN_ID
   AND a.REPORTS_TO = a.USER_ID
 WHERE b.OWN_ID IS NULL
 GROUP BY a.REPORTS_TO, a.EMAIL;

似乎您需要一个listag函数-

SELECT LISTAGG(q.USER_ID), q.REPORTS_TO, e.EMAIL
FROM (SELECT a.USER_ID, a.REPORTS_TO, a.EMAIL
      FROM PortalX.PTX_USERS a
      LEFT OUTER JOIN PortalX.PTX_LDAP_USERS b
                      ON a.USER_ID = b.OWN_ID
      WHERE b.OWN_ID IS NULL) q
      INNER JOIN PortalX.PTX_USERS e ON q.REPORTS_TO = e.USER_ID
GROUP BY q.REPORTS_TO, e.EMAIL;


您可以使用这样的查询

SELECT a.REPORTS_TO, a.EMAIL, 
       LISTAGG(a.USER_ID) WITHIN GROUP (ORDER BY a.USER_ID) as USERS
  FROM PortalX.PTX_USERS a
  LEFT JOIN PortalX.PTX_LDAP_USERS b
    ON a.USER_ID = b.OWN_ID
   AND a.REPORTS_TO = a.USER_ID
 WHERE b.OWN_ID IS NULL
 GROUP BY a.REPORTS_TO, a.EMAIL;

包含
listag()
function

您的两个SQL都是相同的问题是什么?您可以进一步解释吗