Привет, я пытаюсь написать оператор If в атрибуте Band, но безуспешно T_T. что я пытаюсь сделать, так это иметь один символ A, B, C, D в зависимости от атрибута owner_category, Sheds и Water_Supply. Любая помощь будет отличной ^^.

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'))
)
1
WESTKINz 30 Янв 2014 в 03:06
Да, это SQL Server
 – 
WESTKINz
30 Янв 2014 в 03:14
Пожалуйста, будьте конкретны при идентификации серверного программного обеспечения - «SQL Server» почти всегда идентифицируется как Microsoft SQL Server, а не Oracle.
 – 
D Stanley
30 Янв 2014 в 03:29
Это оракул 11g yhea спасибо 4 подсказка n yhea извините, это мой первый раз на форуме и новичок в этом бизнесе sql :)
 – 
WESTKINz
30 Янв 2014 в 03:32

1 ответ

Лучший ответ

Прочтите документацию по виртуальным столбцам:

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'))
)

Кстати, я НАСТОЯТЕЛЬНО рекомендую:

  • использование поля bit вместо ограничения Yes / No для Sheds и Water_Supply (экономит место и ограничения проверки накладных расходов, а в большинстве языки приложения)
  • использование таблицы поиска для Owner_Category вместо строкового ограничения в основном по тем же причинам
4
D Stanley 25 Сен 2018 в 16:30
Хотя я работал с sql-сервером, но оказалось, что я делал это на oracle 11g, и этот код, который вы мне дали, дал мне ошибку, извините, моя ошибка
 – 
WESTKINz
30 Янв 2014 в 03:30
Обновил мой ответ - добавлены скобки вокруг оператора CASE. Должно работать сейчас.
 – 
D Stanley
30 Янв 2014 в 03:32
Спасибо, сэр, что сработало !! и хочешь шоколадное печенье :)
 – 
WESTKINz
30 Янв 2014 в 03:35