首页 > 解决方案 > Oracle SQL:如何返回几个不同的列

问题描述

我有一个输出的 Oracle 查询

在此处输入图像描述

但我希望输出除事件 ID 之外的所有不同列,即

在此处输入图像描述

我尝试将 GROUP BY 添加到 Oracle Query 但出现错误,

DataSource.Error: Oracle: ORA-00979: not a GROUP BY expression
Details:
    DataSourceKind=Oracle
    DataSourcePath=dlporacle
    Message=ORA-00979: not a GROUP BY expression
    ErrorCode=-2147467259

以下是我的查询...请协助

SELECT 
   I.INCIDENTID                    AS "Incident ID",
   I.CREATIONDATE                  AS "Creation Date",
   MO.IPADDRESS           AS "IP Address",
   MO.DOMAINUSERNAME               AS "Login ID",
   MO.ENDPOINTMACHINENAME          AS "Computer Name",
   M.MESSAGESUBJECT                AS "Email Subject"
 FROM MESSAGE M,
 JOIN INCIDENT I ON M.MESSAGEID = I.MESSAGEID AND M.MESSAGESOURCE = I.MESSAGESOURCE AND  M.MESSAGEDATE  = I.MESSAGEDATE
 JOIN MESSAGEORIGINATOR MO ON  M.MESSAGEORIGINATORID = MO.MESSAGEORIGINATORID
 WHERE  M.MESSAGESOURCE = 'ENDPOINT'
    AND I.ISDELETED = 0
  GROUP BY MO.IPADDRESS, MO.DOMAINUSERNAME, MO.ENDPOINTMACHINENAME, M.MESSAGESUBJECT

标签: sqloraclegroup-by

解决方案


修复JOIN语法并使用聚合:

SELECT
   MIN(I.INCIDENTID)      AS "Incident ID",
   I.CREATIONDATE                  AS "Creation Date",
   MO.IPADDRESS           AS "IP Address",
   MO.DOMAINUSERNAME               AS "Login ID",
   MO.ENDPOINTMACHINENAME          AS "Computer Name",
   M.MESSAGESUBJECT                AS "Email Subject"
FROM MESSAGE M JOIN
     INCIDENT I
     ON M.MESSAGEID = I.MESSAGEID AND
        M.MESSAGESOURCE = I.MESSAGESOURCE AND
        M.MESSAGEDATE = I.MESSAGEDATE JOIN
     MESSAGEORIGINATOR MO
     ON  M.MESSAGEORIGINATORID = MO.MESSAGEORIGINATORID
WHERE M.MESSAGESOURCE = 'ENDPOINT' AND I.ISDELETED = 0
GROUP BY I.CREATIONDATE, MO.IPADDRESS, MO.DOMAINUSERNAME, MO.ENDPOINTMACHINENAME, M.MESSAGESUBJECT

所有未聚合的列都需要在GROUP BY.

为什么源和日期必须匹配加入INCIDENT以及消息 ID?似乎消息 id 应该足够了。


推荐阅读