2013-04-09 3 views
-1

테이블이 있습니다.오라클 - 업데이트, 디코드 및 값 설정

  1. 전체 목록을 목록의 상단에
  2. 넣어 '애플, 망고, 코코넛'을 선택
    **Fruit Number** 
    Apple  5 
    Grape  9 
    Orange 1 
    Coconut 54 
    Mango  22 
    

    나는 싶습니다.
  3. 업데이트 수 = ROWNUM는

과 같아야 목록은 다음과 현재의 순서 :

**Fruit Number** 
Apple  1 
Mango  2 
Coconut 3 
Grape  4 
Orange 5 

해봤 다음 그러나 점점 구문 문제를 ..

update tablename 
set id = rownum 
where fruit in (select fruit from table order by decode(fruit,'Apple',1,'Mango',2,'Coconut',3)) 

답변

0
UPDATE (
    SELECT ROWNUM+5 AS r, fruit, number FROM TABLE 
    WHERE fruit NOT IN ('Apple', 'Mango', 'Coconut', 'Grape', 'Orange') 
    UNION 
    SELECT 1 AS r, 'Apple' AS fruit, number FROM TABLE 
    UNION 
    SELECT 2 AS r, 'Mango' AS fruit, number FROM TABLE 
    UNION 
    SELECT 3 AS r, 'Coconut' AS fruit, number FROM TABLE 
    UNION 
    SELECT 4 AS r, 'Grape' AS fruit, number FROM TABLE 
    UNION 
    SELECT 5 AS r, 'Orange' AS fruit, number FROM TABLE 
) 
SET number = r; 
+0

감사하지만이 테이블에는 '과일'이 많이 있습니다. 그것들을 일반적인 값으로 어떻게 설정할 수 있습니까? 따라서 코드는 처음 5 개를 정렬하지만 처음 5 개 이후에는 number = rowid를 어떻게 설정할 수 있습니까? – user648244

+0

내 업데이트를보고, 작동하는지 설명하십시오. – Sebas

+0

그게 전부는 아니에요. 그것을 else 문에 통합 할 수있는 방법이 있습니까? 예 : 다른 번호 = rownum (이 시도했지만 구문 오류가 나타납니다) – user648244

0

다음 쿼리를 사용하면됩니다.

UPDATE table SET number = 
CASE fruit 
    WHEN 'Apple' THEN 1 
    WHEN 'Mango' THEN 2 
    WHEN 'Coconut' THEN 3 
    WHEN 'Grape' THEN 4 
    WHEN 'Orange' THEN 5 
END;