1
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 のエラーを表示すると、無効な識別子です。列にいくつかの列エイリアスを使用できませんか??

4

1 に答える 1

1

大文字と小文字を区別する識別子を使用する場合(ほとんど常に悪い考えです)、その識別子へのすべての参照で大文字と小文字を区別する必要があります。あなたの場合、"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
于 2013-03-20T21:58:07.257 に答える