【发布时间】:2020-06-01 14:03:38
【问题描述】:
我确实希望有人可以帮助我。
我正在对我的列执行两个计数函数,这两个函数都由列具有特定文本的位置指定(参见下面的代码)。根据我的会议计数(WHERE EVENT_TYPE = 'meeting_start'),我发现这可以在同一个会议中多次弹出。我只需要对每个会议事件 id 计算一次,并且找不到这样做的方法。
select I.CRM_INSTANCE_NAME,
C.CUSTOMER_NAME,
U.USER_NAME,
ltrim(TO_CHAR(U.CREATED_DATE ,'mm-yyyy'),'0') AS USER_ACTIVATION_DATE,
ltrim(TO_CHAR(U.LAST_UPDATED_DATE ,'dd-mm-yyyy'),'0') AS LAST_ACTIVITY_DATE,
COUNT(E.EVENT_TYPE) AS MEETING,
COUNT(F.EVENT_TYPE) AS FINALISED
FROM SBX_USERS U
LEFT JOIN SBX_CUSTOMERS C on U.CUSTOMER_ID = C.CUSTOMER_ID
LEFT JOIN SBX_CRM_INSTANCES I on C.CRM_INSTANCE_ID = I.CRM_INSTANCE_ID
LEFT JOIN SBX_MEETING M on U.USER_ID = M.USER_ID
LEFT JOIN SBX_EVENTS E ON SOURCE_ID = M.MEETING_ID
LEFT JOIN (SELECT * FROM SBX_EVENTS WHERE EVENT_TYPE = 'meeting_start' AND EVENT_CREATION_DATE >=add_months(sysdate, -12)) E on E.SOURCE_ID = M.MEETING_ID
LEFT JOIN (SELECT * FROM SBX_EVENTS WHERE EVENT_TYPE = 'finalize'AND EVENT_CREATION_DATE >=add_months(sysdate, -12)) F on F.SOURCE_ID = M.MEETING_ID
where U.ENABLED_FLAG IN ('Y','E')
group by I.CRM_INSTANCE_NAME, C.CUSTOMER_NAME, U.USER_NAME, ltrim(TO_CHAR(U.CREATED_DATE ,'mm-yyyy'),'0'), ltrim(TO_CHAR(U.LAST_UPDATED_DATE ,'dd-mm-yyyy'),'0')
order by I.CRM_INSTANCE_NAME;
以上是我当时正在使用的代码,在此先感谢您的帮助。
问候
博士
【问题讨论】:
-
count(case when EVENT_TYPE = 'meeting_start' then 1 end) -
这涉及一个常见错误,人们想要一些连接,每个可能涉及不同的键,一些子查询,每个可能涉及连接和/或聚合,但他们错误地尝试完成所有连接然后全部聚合或聚合以前的聚合。在适当的行上编写单独的聚合和/或聚合一个案例语句选择行;加入一个独特的列集。有时 DISTINCT 聚合在非键连接后选择正确的值。 (对 2 个输入表中任一个的非键的连接可以为每个表的每个键提供多行。)
标签: sql oracle join group-by count