2012-01-12 11 views
0

BY GROUP:ない私が選択し、以下の式まし

Select attribut1, dateattribut, attribut3, 
     attribut4, attribut15, town_CODE, count(*)  
from (
select attribut1, dateattribut, attribut3, attribut4, attribut15, (CASE 
    WHEN TO_CHAR(dateattribut,'YYYY') = '2005' THEN 
    CASE town_CODE 
    WHEN '039' THEN '078' WHEN '050' THEN '093' 
    WHEN '091' THEN '008' WHEN '102' THEN '093' 
    ELSE town_CODE end 
    ELSE town_CODE end) as town_CODE 
from towntable) GROUP BY attribut1, dateattribut, 
         attribut3, attribut4, 
         attribut15, town_CODE 
having count(*) > 1; 

私は当社のサーバー上でこのクエリを実行すると、それが正常に動作。私の顧客のサーバーでは、私はオラクルのエラーORA-00979: not a GROUP BY expressionを取得します。

これまでのところ、私はケースとエイリアスに問題があることがわかりました。 これで動作します。

提案がありますか?

*私はこのステートメントで何をしようとしていますが、すべてのダブルエントリを取得することです。内側のクエリを使用して新しいコードにすべての古いコードを変更し、それらをグループ化して複数の時刻が存在するかどうかを確認します。 一部の顧客は古いコードを使用していましたが、現在は同じ町を2回持っている可能性があります。

編集

SELECT * FROM product_component_version

と私は両方に乗る:

Product          Version   Status 

NLSRTL          10.2.0.4.0  Production 
Oracle Database 10g Enterprise Edition  10.2.0.4.0  64bi 
PL/SQL          10.2.0.4.0  Production 
TNS for 64-bit Windows:      10.2.0.4.0  Production 

EDIT2

私のテスト彼は別名で呼び出して好きではないことを私に示しました。 。 設定があり、エイリアスは認識されませんか?

答えて

0

私のソリューションは、ビューを使用することです。

インナービューとして選択してから、通常のように外側の選択し、正常に動作します。

私は、彼は外側の選択でtown_CODEが気に入らないことを知りました。

Select attribut1, dateattribut, attribut3, 
     attribut4, attribut15, town_CODE, count(*)  
from v_towntable 
GROUP BY attribut1, dateattribut, attribut3, 
     attribut4, attribut15, town_CODE 
having count(*) > 1 
1

テーブル名の後ろに括弧とattribut15の後にカンマがありません。これを試してみてください:

Select attribut1, dateattribut, attribut3, 
     attribut4, attribut15, town_CODE, count(*)  
from (
select attribut1, dateattribut, attribut3, attribut4, attribut15, (CASE 
    WHEN TO_CHAR(dateattribut,'YYYY') = '2005' THEN 
    CASE town_CODE 
    WHEN '039' THEN '078' WHEN '050' THEN '093' 
    WHEN '091' THEN '008' WHEN '102' THEN '093' 
    ELSE town_CODE end 
    ELSE town_CODE end) as town_CODE 
from towntable) GROUP BY attribut1, dateattribut, 
         attribut3, attribut4, 
         attribut15, town_CODE 
having count(*) > 1; 
+0

だけでなく、それはあなたが両方のサーバー上からだけ自分のコードを実行する場合は、すべてのエラーを取得するか、実際のクエリは少し大きいだけのタイプミス(このattributのためのいくつかのより多くの変更) – domiSchenk

+0

でしたか? –

+0

でも同じエラーです:-(最初の選択でtown_codeを削除するとわかりましたが、どの町がその町であるか分かりません – domiSchenk

0

元のクエリ中の1つのまたは2つの構文エラーがあるように思われる - 以下の作業をする必要があります:

Select attribut1, 
     dateattribut, 
     attribut3, 
     attribut4, 
     attribut15, 
     town_CODE, 
     count(*)  
from (select attribut1, 
      dateattribut, 
      attribut3, 
      attribut4, 
      attribut15, 
      CASE WHEN TO_CHAR(dateattribut,'YYYY') = '2005' THEN 
        CASE town_CODE 
         WHEN '039' THEN '078' 
         WHEN '050' THEN '093' 
         WHEN '091' THEN '008' 
         WHEN '102' THEN '093' 
         ELSE town_CODE 
        end 
        ELSE town_CODE 
      end as town_CODE 
     from towntable) v 
GROUP BY attribut1, 
     dateattribut, 
     attribut3, 
     attribut4, 
     attribut15, 
     town_CODE 
having count(*) > 1 
+0

スクリプトを短縮したときにsynatxエラーが間違っていました – domiSchenk

+0

@rageit (間違って)質問のケーシングを変更する*有効でない編集 – PeeHaa

3

「私は、当社のサーバー上でこのクエリを実行すると、それが正常に動作。私の顧客の サーバー上で私は、OracleエラーORA-00979: not a GROUP BY expression.

これは2つのいずれかを意味し得る:

  1. お客様のサーバーはお客様のサーバーとは異なり、その違いによってエラーが防止されます。たとえば、サーバーのバージョンが新しいか、パッチレベルが異なる場合などです。
  2. 実際には、自分のデータベースと同じコードを自分のデータベースで実行しているわけではありません。

後者は、あなた自身のサーバー上で実行するコードではありませんあなたは明らかにここを投稿コードとして、非常に可能性が高いようです。他の人が指摘しているように、2つの構文エラーがありますが、どちらも実際にORA-00979を発しません。

このエラーは、GROUP BY句に含まれていない投影に非集計カラムがあることを意味します。または、投影に含まれていないGROUP BY句に何かがある可能性があります。

+0

うまくいけませんNr.2はコードが同一であるかコピー&ペーストでコードが変更されますDBバージョンの場合SELECT * FROM product_component_version;は同じ結果を示します(私のポストを参照してください) – domiSchenk

関連する問題