1

私はOracleを初めて使用し、プロジェクトへのクエリを開発しています。私にとってはすべて問題ないようですが、クエリを実行すると、オラクルは「ORA-00905:キーワードがありません」というエラーを出します。

彼女は私の質問です::

SELECT DISTINCT ba.uuid AS uuid
     , COUNT(*) over() AS rowcount 
FROM basicaddress ba 
WHERE ba.postalcode='143456' 
   OR ba.lastname LIKE '%143456%' 
   OR ba.city LIKE '%143456%'
GROUP BY CASE WHEN ba.postalcode='143456' THEN ba.postalcode, ba.uuid END
       , CASE WHEN ba.lastname LIKE '%143456%' THEN ba.lastname, ba.uuid END
       , CASE WHEN ba.city LIKE '%143456%' THEN ba.city, ba.uuid 
                                           ELSE ba.postalcode,ba.uuid END 
ORDER BY CASE WHEN ba.postalcode='143456' THEN ba.postalcode END DESC
       , CASE WHEN ba.lastname LIKE '%143456%' THEN ba.lastname END ASC
       , CASE WHEN ba.city LIKE '%143456%' THEN ba.city ASC 
                                           ELSE ba.postalcode END DESC

私が見逃しているキーワードは何ですか?どんな助けでも大歓迎です。

4

2 に答える 2

2

エラーはCASEステートメントにあります

CASE 
  WHEN ba.postalcode='143456' 
  THEN ba.postalcode, ba.uuid  <-- here. You can return value of only one column
END;                          

との間で決定する必要がba.postalcodeあり ba.uuidます。または、最終結果セットの両方の列の値を表示する場合は、||を使用してそれらを連結します。暗黙的または明示的な型変換を使用する演算子またはCONCAT関数。

于 2012-09-23T15:26:27.110 に答える
0

おそらく次のようELSEに、式で句を使用するつもりだったと思います。CASE

SELECT DISTINCT ba.uuid AS uuid
     , COUNT(*) AS rowcount
FROM basicaddress ba  
WHERE ba.postalcode='143456'
   OR ba.lastname LIKE '%143456%'
   OR ba.city LIKE '%143456%' 
GROUP BY CASE WHEN ba.postalcode='143456' 
              THEN ba.postalcode
              ELSE ba.uuid END
       , CASE WHEN ba.lastname LIKE '%143456%' 
              THEN ba.lastname
              ELSE ba.uuid END
       , CASE WHEN ba.city LIKE '%143456%' 
              THEN ba.city
              ELSE ba.postalcode,ba.uuid END
ORDER BY CASE WHEN ba.postalcode='143456'
              THEN ba.postalcode END DESC
       , CASE WHEN ba.lastname LIKE '%143456%' 
              THEN ba.lastname END ASC
       , CASE WHEN ba.city LIKE '%143456%'
              THEN ba.city ASC
              ELSE ba.postalcode END DESC

over()また、関数に句は必要ありませんCOUNT()。また、構文がわかりやすくなるようにクエリを再作成し、CASE式の1つで構文エラーと思われるものを修正しました。安全のために、常に条件を提供する必要があることに注意してくださいELSE。その部分はあなたにお任せします。

于 2012-09-23T16:01:09.250 に答える