2016-04-18 18 views
1

こんにちは - 下記の質問であなたの助けが必要です。私は、グループに下記の下のクエリを実行しようとしているが、私は次のエラーを取得する:oracle - case文とグループby

ORA-00904:” SALES_ID_CO”:invalid identifier

あなたはこれを助けてくださいことはできますか?どうもありがとう。

Select 
count(1), 
sales_date, 
CASE 
WHEN sales_id like '1%' 
THEN substr(sales_id,2,6) 
WHEN sales_id like '3%' 
THEN substr(sales_id ,2,6) 
WHEN sales_id like '4%' 
THEN substr(sales_id ,2,6) 
WHEN sales_id like '5%' 
THEN substr(sales_id ,2,6) 
WHEN sales_id like '9%' 
THEN substr(sales_id ,1,6) 
WHEN sales_id like '70%' OR sales_id like '90%' OR sales_id like '31%' 
THEN substr(sales_id ,2,6) 
END AS SALES_ID_CO, 

case 
WHEN sales_branch like '10%' AND sales_code<> '678 ' 
THEN substr(sales_branch,2,6) 
WHEN sales_branch like '200%' AND sales_code<> '678 ' 
THEN substr(sales_branch,2,6) 
WHEN sales_branch like '300%' AND sales_code<> '678 ' 
THEN substr(sales_branch,2,6) 
WHEN sales_branch like '456%' AND sales_code<> '678 ' 
THEN substr(sales_branch,2,6) 
END AS SALES_BRANCH 

from tbl_sales_cde 

where sales_country IN (‘USA’,’ASIA’,’EU’) 
group by SALES_ID_CO, SALES_BRANCH,SALES_DATE 
+0

最初の 'CASE'文の最後の' WHEN'に 'THEN'節がありません。 2番目の 'CASE'ステートメントから' LIKE'ステートメントもすべて抜け出しました。 – MT0

+0

'CASE'句が順番に実行されます。したがって、 'sales_id'が'90% 'のようなものは決してありません。なぜなら、' sales_id 'が' 9% 'のように前に一致するからです。 – Steven

答えて

1

Oracleはgroup by句で列の別名をサポートしていません。

SELECT SALES_ID_CO, SALES_BRANCH,SALES_DATE, COUNT(*) 
FROM (Select sales_date, 
      (CASE WHEN sales_id like '1%' 
        THEN substr(sales_id,2,6) 
        WHEN sales_id like '3%' 
        THEN substr(sales_id ,2,6) 
        WHEN sales_id like '4%' 
        THEN substr(sales_id ,2,6) 
        WHEN sales_id like '5%' 
        THEN substr(sales_id ,2,6) 
        WHEN sales_id like '9%' 
        THEN substr(sales_id ,1,6) 
        WHEN sales_id like '70%' OR sales_id like '90%' OR sales_id like '31%' 
       END) AS SALES_ID_CO, 
       (case WHEN sales_branchlike '10%' AND sales_code<> '678 ' 
        THEN substr(sales_branch,2,6) 
        WHEN sales_branchlike '200%' AND sales_code<> '678 ' 
        THEN substr(sales_branch,2,6) 
        WHEN sales_branchlike '300%' AND sales_code<> '678 ' 
        THEN substr(sales_branch,2,6) 
        WHEN sales_branchlike '456%' AND sales_code<> '678 ' 
        THEN substr(sales_branch,2,6) 
       END) AS SALES_BRANCH 
     from tbl_sales_cde 
     where sales_country IN ('USA', 'ASIA', 'EU') 
    ) s 
group by SALES_ID_CO, SALES_BRANCH,SALES_DATE; 

注:副問合せを使用してくださいまた、where句のカーリー単一引用符を持っていたが、それはコピーの問題かもしれません。

2
SELECT SALES_ID_CO, 
     SALES_BRANCH, 
     SALES_DATE, 
     count(1) 
FROM (
    SELECT sales_date, 
     CASE 
     WHEN sales_id LIKE '70%' 
     OR sales_id LIKE '90%' 
     OR sales_id LIKE '31%' 
     OR SUBSTR(sales_id, 1, 1) IN ('1', '3', '4', '5') 
      THEN substr(sales_id,2,6) 
     WHEN sales_id LIKE '9%' 
      THEN substr(sales_id ,1,6) 
     END AS SALES_ID_CO, 
     CASE 
     WHEN sales_code<> '678 ' 
     AND (
       sales_branch LIKE '10%' 
      OR sales_branch LIKE '200%' 
      OR sales_branch LIKE '300%' 
      OR sales_branch LIKE '456%' 
     ) 
      THEN substr(sales_branch,2,6) 
     END AS SALES_BRANCH 
    from tbl_sales_cde 
    where sales_country IN ('USA','ASIA','EU') 
) 
group by SALES_ID_CO, SALES_BRANCH,SALES_DATE