在Oracle的外部查询中,列别名不能访问


select k.Val, sum(k.Cnt) "Cnt" from 
(
(select a.Env_Location "Val", count( a.VolumeID ) "Cnt"
    from DTree
    join ZCOP_APLNG_Documents a on
     DTree.DataID = a.DataID and DTree.VersionNum = a.VersionNum
    where
     DTree.OwnerID =  -2111 and
     DTree.SubType not in ( 0, 136 ) and
     a.Env_Location is not NULL
     group by a.Env_Location
     )
union
     (select
     b.Env_Location "Val",  count( b.VolumeID ) "Cnt"
    from DTree
    join ZCOP_APLNG_Corr b on
     DTree.DataID = b.DataID and DTree.VersionNum = b.VersionNum
    where
     DTree.OwnerID = -2111 and
     DTree.SubType not in ( 0, 136 ) and
     b.Env_Location is not NULL
     group by b.Env_Location
     )
 ) k     
    group by k.Val
有谁能帮我做这件事吗?显示错误Val或Cnt是无效的标识符。我们不能为列使用一些列别名吗?

如果您想使用区分大小写的标识符(几乎总是一个坏主意),那么对该标识符的每个引用都需要区分大小写。在您的示例中,"Val""Cnt"都是区分大小写的标识符,因此您每次都需要使用区分大小写的语法来引用它们。就像

SELECT k."Val", sum(k."Cnt") "Cnt" from 
   ...
GROUP BY k."Val"

在绝大多数情况下,您确实不想使用区分大小写的别名。通常使用

会更好。
SELECT k.val, sum(k.cnt) cnt from 
(
  SELECT a.env_location val, count( a.volumeID ) cnt
  ...
  UNION 
  SELECT b.env_location val, count( b.volumeID) cnt
  ...
) k
 GROUP BY k.val

最新更新