2012-11-28 5 views
0
CREATE VIEW hd3_b 
AS 
    SELECT CASE 
      WHEN hd.country_visited = 'USA' THEN 'AMERICA' 
      WHEN hd.country_visited = 'India' THEN 'ASIA' 
      WHEN hd.country_visited = 'CHINA' THEN 'ASIA' 
      WHEN hd.country_visited = 'SPAIN' THEN 'EUROPE' 
      ELSE hd.country_visited 
     END AS hd.COUNTRY_VISITED 
    FROM holiday_details hd 
    UNION 
    SELECT hd.holiday_desc, 
     holiday_code 
    FROM holiday_details hd 

이것은 현재 가지고있는 코드입니다. 누락 된 오류 또는 잘못된 키워드 오류가 계속 발생합니다.SQL 문과 관련된 문제

누구나 내 구문에서 눈을 멀게하는 오류를 볼 수 있습니까?

+0

정확한 오류 메시지를 게시 할 수 있다면 도움이됩니다. –

+0

ORA-00923 : FROM 키워드를 찾을 수 없습니다. –

+0

두 번째 선택에서 열 중 하나를 제거해도 문제가 해결되지 않았습니다. –

답변

0

는 HD를 필요로하지 않았다

CREATE VIEW hd3_b 
AS 
    SELECT CASE 
      WHEN hd.country_visited = 'USA' THEN 'AMERICA' 
      WHEN hd.country_visited = 'India' THEN 'ASIA' 
      WHEN hd.country_visited = 'CHINA' THEN 'ASIA' 
      WHEN hd.country_visited = 'SPAIN' THEN 'EUROPE' 
      ELSE hd.country_visited 
     END AS COUNTRY_VISITED 
    FROM holiday_details hd 
    UNION 
    SELECT hd.holiday_desc, 
     hd.holiday_code 
    FROM holiday_details hd 

을 시도합니다. COUNTRY_VISITED

COUNTRY_VISITED 별칭이기 때문에 AS thisl 라인

END, 당신은 테이블 별칭

4

당신은 몇 가지 오류가 그것을보다 앞에 필요하지 않습니다. SELECT 문을 사용하여 다른 수의 열을 선택하는 것으로 보입니다. 당신이 UNION을 사용하는 경우 열 번호가 동일해야합니다 : 당신은 또한 첫번째 선택에서 열 이름에 테이블 별칭이

CREATE VIEW hd3_b 
AS 
    SELECT CASE 
      WHEN hd.country_visited = 'USA' THEN 'AMERICA' 
      WHEN hd.country_visited = 'India' THEN 'ASIA' 
      WHEN hd.country_visited = 'CHINA' THEN 'ASIA' 
      WHEN hd.country_visited = 'SPAIN' THEN 'EUROPE' 
      ELSE hd.country_visited 
     END AS COUNTRY_VISITED, -- remove the hd alias 
     Null as PlaceholderColumn 
    FROM holiday_details hd 
    UNION 
    SELECT hd.holiday_desc, 
     holiday_code 
    FROM holiday_details hd 

. 당신은 하나의 열을 반환하려면

, 당신은 사용하고자하는 것입니다 : 당신은 또한 동일한 데이터 형식을 가지고 있어야 각 SELECT에 동일한 수의 열을 갖는 쿼리 게다가

CREATE VIEW hd3_b 
AS 
    SELECT CASE 
      WHEN hd.country_visited = 'USA' THEN 'AMERICA' 
      WHEN hd.country_visited = 'India' THEN 'ASIA' 
      WHEN hd.country_visited = 'CHINA' THEN 'ASIA' 
      WHEN hd.country_visited = 'SPAIN' THEN 'EUROPE' 
      ELSE hd.country_visited 
     END AS COUNTRY_VISITED -- remove the hd alias 
    FROM holiday_details hd 
    UNION 
    SELECT hd.holiday_desc 
    FROM holiday_details hd 

을 각 열. 둘 다 같지 않으면 데이터 유형을 동일하게 만들기 위해 열의 수를 CAST 수행해야합니다.

+0

+1 - 26 초 나 더 빠릅니다. – Lamak

+0

첫 번째 해결 방법은 필요에 따라 더 적절합니다. holiday_Desc 및 Holiday_code를 모두 보유하고 있지만, FROM이 누락되지 않고 두 솔루션 모두에서 문자 세트 놓치기가 발생합니다. 어떤 아이디어가 원인일까요? Country_Visited는 NVARCHAR이며 Holiday_desc는 Holiday_code이며 숫자는 –

+0

입니다. @TomBetts 데이터 유형이 일치하지 않으면 varchar2의 숫자 인 해당 필드를 모두 'cast'해야합니다. 열 수는 같아야하지만 데이터 유형은 동일해야합니다. – Taryn

2

음, 오류가 있지만 누락 된 키워드는 표시되지 않습니다. 당신은 컬럼의 다른 번호와 UNIONSELECT 사이의 일을하려고하고 있습니다 :

CREATE VIEW hd3_b 
AS 
    SELECT CASE 
      WHEN hd.country_visited = 'USA' THEN 'AMERICA' 
      WHEN hd.country_visited = 'India' THEN 'ASIA' 
      WHEN hd.country_visited = 'CHINA' THEN 'ASIA' 
      WHEN hd.country_visited = 'SPAIN' THEN 'EUROPE' 
      ELSE hd.country_visited 
     END AS hd.COUNTRY_VISITED 
    FROM holiday_details hd 
    UNION 
    SELECT holiday_desc --holiday_code This column shouldn't be here 
    FROM holiday_details 
0

나는 당신이 정말로 UNION을 원하는 생각하지 않는다 - 당신이 두 경우 모두에서 holiday_details 테이블에서 선택하고 나타납니다. 당신은 단지 관련 holiday_desc 및 holiday_code와 함께 열 수 country_visited을 원하는 경우,이 시도 :

CREATE VIEW hd3_b 
AS 
    SELECT CASE 
      WHEN country_visited = 'USA' THEN 'AMERICA' 
      WHEN country_visited = 'India' THEN 'ASIA' 
      WHEN country_visited = 'CHINA' THEN 'ASIA' 
      WHEN country_visited = 'SPAIN' THEN 'EUROPE' 
      ELSE country_visited 
     END AS COUNTRY_VISITED, 
    holiday_desc, 
    holiday_code 
    FROM holiday_details 

이 구문은 T-SQL로 작동합니다. 오라클을 사용하여 구문이 올바른지 확인하기에는 너무 오랜 시간이 걸렸습니다.

관련 문제