CREATE OR REPLACE VIEW V_DATMT_NONGIS_ONU_PORT_1  AS
SELECT Distinct                R.Id  REGIONID,
                R.NAMECN  REGIONNAME,
                F.Name   SITENAME,--站点
                D.Name   ROOMNAME,--机房
                DNDEVICE.SHORTNAME DNDEVICENAME,
                DNDEVICE.SHORTCODE DNDEVICECODE,
                DNSUBNE.NO DNSUBNENO,
                DNPACKAGE.SHORTCODE DNPACKAGESHORTCODE,
                DNPORT.SHORTCODE DNPORTNO,
                DNDEVICE.ID DNDEVICEID,
                DNPORT.ID DNPORTID,
                DECODE(DNPORT.SERVICESTATUS,0,'空闲', 1, '预占用', 2, '保留',  3, '封锁', 4, '实占用',5, '调度中', 6,'时隙划分','未知') SERVICESTATUS,
                DECODE(DNPORT.VOICESERVICESTATUS,0,'空闲',1,'预占用',2,'保留',3,'封锁',4,'实占用',5,'调度中',6,'时隙划分','未知') VOICESERVICESTATUS,
                DNPORT.TELNUM TELNUM,
                DNPORT.ADSLACCESSNO,
                DNPORT.PHYSTATUS PHYSTATUS,
                DECODE(DNPORT.USABILITY,1,'可用',0,'不可用','未知') USABILITY ,--端子可用性
                DNPORT.COMMENTS,
                DNPORT.IDINEMS IDINEMS, --网管标识
                --add by yangzhao
                MIN(DNVLAN.VLANID) VLANID,
                DNPORT_DNVLAN.Dnportid dnportvlan,
                V_DATMT_DNPORT_DNPORTCONNECTOR.DNPORTID VDNPORTID,
                CONNECTMODULE.NAME MDFNAME,--MDF横列名称
                CONNECTMODULE.NO MDFNO, --MDF横列编码
                CONNECTPANEL.NO PANELNO,--MDF面板编号
                CONNECTOR.NAME CONNECTORNO,--MDF横列端子编号
                DNMDFMODULE.SHORTCODE MDFLCODE, --MDF列编号
                DNDEVICETYPE.ID   DNDEVICETYPE_ID,
                
              --  V_DATMT_DNPORT_QE_VLANID.VLANID VLANID, --VLANID
              --  V_DATMT_DNPORT_CONNECTOR.MDFNAME MDFNAME, -- MDF横列名称
              --  V_DATMT_DNPORT_CONNECTOR.MDFNO MDFNO, --MDF横列编码
              -- V_DATMT_DNPORT_CONNECTOR.PANELNO PANELNO, --MDF面板编码
              --V_DATMT_DNPORT_CONNECTOR.CONNECTORNO CONNECTORNO,--MDF横列端子编号
              --  V_DATMT_DNPORT_CONNECTOR.MDFLCODE MDFLCODE, --MDF列编号
                '' IMPORTFLAG --是否更新导入
                
       
                
  FROM DNPORT, DNPACKAGE, DNSUBNE, DNDEVICE, HOST D,HOST F, REGION  R,
  --add by yangzhao
       DNPORT_DNVLAN, DNVLAN, DNDEVICETYPE,
       CONNECTOR,
       CONNECTPANEL,
       CONNECTMODULE,
       DNMDFMODULE,
       V_DATMT_DNPORT_DNPORTCONNECTOR
 -- V_DATMT_DNPORT_QE_VLANID,V_DATMT_DNPORT_CONNECTOR
  WHERE DNPORT.DNPACKAGEID = DNPACKAGE.ID
   AND DNPACKAGE.DNSUBNEID = DNSUBNE.ID
   AND DNSUBNE.DNDEVICEID = DNDEVICE.ID
   AND DNDEVICE.HOSTID = D.ID
   AND F.REGIONID = R.ID
   AND D.PARENTHOSTID=F.ID
   And dndevice.dndevicetypeid=dndevicetype.id
   And dndevicetype.category=21
  AND DNPORT.ID =DNPORT_DNVLAN.Dnportid(+)
  AND DNPORT.ID = DNVLAN.VLANID(+)
  
     --add V_DATMT_DNPORT_CONNECTOR querycondition
   And (CONNECTMODULE.ID = CONNECTPANEL.CONNECTMODULEID)
    And (CONNECTPANEL.ID = CONNECTOR.CONNECTPANELID)
    And (CONNECTOR.ID = V_DATMT_DNPORT_DNPORTCONNECTOR.CONNECTORID)
    And(CONNECTMODULE.ISTEMPLATE = 0)
    And (CONNECTPANEL.ISTEMPLATE = 0)
    And (CONNECTOR.ISTEMPLATE = 0)
    And (DNMDFMODULE.ID(+) = CONNECTPANEL.DNMDFMODULEID) 
   
     --add V_DATMT_DNPORT_QE_VLANID querycondition
   And(DNPORT.ID = DNPORT_DNVLAN.DNPORTID)
   AND (DNDEVICE.ID = DNPORT.DNDEVICEID)
   AND (DNDEVICETYPE.ID = DNDEVICE.DNDEVICETYPEID)
   AND (DNVLAN.ID = DNPORT_DNVLAN.DNVLANID)
   AND (DNPORT.ISTEMPLATE = 0)
   AND (DNDEVICE.ISTEMPLATE = 0)
    GROUP BY DNVLAN.VLANID;
   
为什么老是报不是group by表达式  
是因为我用了聚合函数 不是已经group by 了啊  怎么还会有问题啊?
去掉了聚合函数和group by 就没问题了 大师们 帮帮我啦    
   

解决方案 »

  1.   

    所有未出现在聚合函数参数中的SELECT字段,必须出现在GROUP BY中
    恰恰相反MIN(DNVLAN.VLANID) 表明VLANID不必须出现在GROUP BY子句中
    其它全部SELECT字段必须出现在GROUP BY子句中。 
      

  2.   

    R.Id REGIONID,
      R.NAMECN REGIONNAME,
      F.Name SITENAME,--站点
      D.Name ROOMNAME,--机房
      DNDEVICE.SHORTNAME DNDEVICENAME,
      DNDEVICE.SHORTCODE DNDEVICECODE,
      DNSUBNE.NO DNSUBNENO,
      DNPACKAGE.SHORTCODE DNPACKAGESHORTCODE,
      DNPORT.SHORTCODE DNPORTNO,
      DNDEVICE.ID DNDEVICEID,
      DNPORT.ID DNPORTID,
      DECODE(DNPORT.SERVICESTATUS,0,'空闲', 1, '预占用', 2, '保留', 3, '封锁', 4, '实占用',5, '调度中', 6,'时隙划分','未知') SERVICESTATUS,
      DECODE(DNPORT.VOICESERVICESTATUS,0,'空闲',1,'预占用',2,'保留',3,'封锁',4,'实占用',5,'调度中',6,'时隙划分','未知') VOICESERVICESTATUS,
      DNPORT.TELNUM TELNUM,
      DNPORT.ADSLACCESSNO,
      DNPORT.PHYSTATUS PHYSTATUS,
      DECODE(DNPORT.USABILITY,1,'可用',0,'不可用','未知') USABILITY ,--端子可用性
      DNPORT.COMMENTS,
      DNPORT.IDINEMS IDINEMS, --网管标识这些字段都不在聚合函数或者group by 里面
    所以就报错
      

  3.   

    这个我建议你用分析函数,不然你的group by clause里面的字段太多了
    就把MIN(DNVLAN.VLANID)替换成下面的这个:
    MIN(DNVLAN.VLANID)over(parition by DNVLAN.VLANID order by DNVLAN.VLANID) VLANID,
      

  4.   

    sorry 应该是
    MIN(DNVLAN.VLANID)over(partition by DNVLAN.VLANID order by DNVLAN.VLANID)