列别名无法在Oracle的外部查询中访问

时间:2013-03-20 21:51:57

标签: oracle union alias

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是无效的标识符。我们不能为列使用某些列别名吗?

1 个答案:

答案 0 :(得分:1)

如果您想使用case-sensitive identifiers(几乎总是一个坏主意),对该标识符的每个引用都需要区分大小写。在您的情况下,"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