2014-01-29 2 views
1

안녕하세요 저는 Band 속성에 If 문을 쓰려고했지만 성공하지는 않았습니다. T_T. 무엇을하려고하는 것은 owner_category, Sheds 및 Water_Supply 속성에 따라 단일 문자 A, B, C, D가 있어야합니다. 어떤 도움도 좋을 것입니다 ^^.오라클 SQL에서 복잡한 IF 문 사용

CREATE TABLE Rent_Band 
(
    Plot_ID NUMBER(3), 
    Band VARCHAR(1) 
    IF SELECT * FROM Rent_Band WHERE Owner_Category = 'Council' AND WHERE Sheds ='No' THEN Band ='A' 
    ELSE IF SELECT * FROM Rent_Band WHERE Owner_Category = 'Private' AND WHERE Water_Supply ='Yes' THEN Band ='D' 
    ELSE IF SELECT * FROM Rent_Band WHERE Owner_Category = 'Council' AND WHERE Water_Supply ='No' AND WHERE Sheds ='Yes' THEN Band ='B' 
    ELSE IF SELECT * FROM Rent_Band WHERE Owner_Category = 'Private' AND WHERE Water_Supply ='No' AND WHERE Sheds ='No' THEN Band ='B' 
    ELSE THEN Band = 'C', 
    Rent_Charge NUMBER(4), 
    Owner_Category VARCHAR(10) CONSTRAINT Checking_Owner_Category CHECK((Owner_Category='Private') OR (Owner_Category='Council')), 
    Sheds VARCHAR(3) CHECK((Sheds='Yes') OR (Sheds='No')), 
    Water_Supply VARCHAR(3) CHECK((Water_Supply='Yes') OR (Water_Supply='No')) 
) 
가 virutal 열에
+0

에 대한 문자열 제약 조건에 대한 조회 테이블을 사용하여 GES)는

  • SQL 서버인가요? – Szymon

  • +0

    예 서버 소프트웨어를 식별 할 때 – WESTKINz

    +0

    을 구체적으로 지정하십시오. "SQL Server"는 Oracle이 아닌 Microsoft SQL Server로 거의 보편적으로 식별됩니다. –

    답변

    3

    읽기 the documentation : BTW

    CREATE TABLE Rent_Band 
    (
        Plot_ID NUMBER(3), 
        Band VARCHAR(1) AS 
         (CASE WHEN Owner_Category = 'Council' AND Sheds ='No' THEN 'A' 
          WHEN Owner_Category = 'Private' AND Water_Supply ='Yes' THEN 'D' 
          WHEN Owner_Category = 'Council' AND Water_Supply ='No' AND Sheds ='Yes' THEN 'B' 
          WHEN Owner_Category = 'Private' AND Water_Supply ='No' AND Sheds ='No' THEN 'B' 
         ELSE 'C' END), 
        Rent_Charge NUMBER(4), 
        Owner_Category VARCHAR(10) CONSTRAINT Checking_Owner_Category CHECK((Owner_Category='Private') OR (Owner_Category='Council')), 
        Sheds VARCHAR(3) CHECK((Sheds='Yes') OR (Sheds='No')), 
        Water_Supply VARCHAR(3) CHECK((Water_Supply='Yes') OR (Water_Supply='No')) 
    ) 
    

    , 난 강력하게 추천 할 것입니다 :

    • ShedsWater_Supply에 대한 Yes/No 제약 대신 bit 필드를 사용하여 (저장 방 및 오버 헤드 검사 제약 조건을 가지며 대부분의 앱 언어에서 부울로 직접 변환됩니다. Owner_Category 대신 기본적으로 같은 이유
    +0

    나는 SQL 서버를 실행하고 있었지만 오라클 11g에서이 작업을 수행하고 있었고이 코드를 사용하면 오류가 발생했습니다. 죄송합니다. 내 실수는 – WESTKINz

    +0

    내 대답이 업데이트되었습니다. CASE 문. 지금 일해야한다. –

    +0

    감사합니다. 그리고 당신은 초콜릿 쿠키를 원하십니까 :) – WESTKINz