Оператор case в sql

Я хочу создать вычисляемый столбец в корпоративном руководстве SAS, в котором будут отображаться элементы автомобиля, если он соответствует определенным условиям.

  • Есть 75 автомобильных предметов (T.TS_Items), таких как лобовое стекло, шины, руль и т. д.

  • Каждый элемент имеет уникальный идентификатор (T.TS_NUM), поэтому от T.TS_NUM =1 до T.TS_NUM =75.

Затем я хочу присвоить каждому новому элементу автомобиля метку, например, от labelNo_01 до labelNo_75.

Итак, если тип автомобиля — Honda (T.TS_F_NUM = 2), тип — хэтчбек (T.TS_TYPE = I) и T.TS_NUM = 1, то имя нового столбца — LabelName_01 с таким элементом, как лобовое стекло.

и если тип транспортного средства изменится, например, тип транспортного средства Toyota (T.TS_F_NUM = 1), но в остальном то же самое, это даст мне 75 автомобилей для Toyota.

Мой код:

PROC SQL;
CREATE TABLE WORK.MotorVehicle AS 
SELECT 
T.TS_VEHICLE_RDES, 
/* FI_Label_01 */
Case When 
T.TS_F_NUM in (1,2) And  
T.TS_TYPE = I And 
T.TS_NUM =1 Then T.T_Item
else T.T_Item
End
AS FI_Label_01
FROM T.T_ITEM 
WHERE  T.TS_F_NUM = 41 
ORDER BY T.TS_NUM ;
QUIT;

Вышеприведенное просто и работает, но я не уверен, как добавить оператор Else или Else if. В основном, когда я использую приведенный выше код и жестко кодирую тип транспортного средства в 1 (toyota) в выражении where, он работает, и он дает мне только Toyota, но также дает мне все типы, а не только хэтчбек. Я хочу добавить условие, при котором он дает только тип хэтчбека, но я не знаю, как и где в приведенном выше коде он войдет.

Также поможет цикл, чтобы мне не приходилось повторять процесс для каждого типа транспортного средства. Надеюсь, эта информация поможет.

Некоторые данные.

T.TS_F_NUM      T.TS_TYPE       T.T_Item           T.TS_NUM
1               I               windscreen        1
2               I               side mirror       2
1               C               Side mirror       3
2               C               passenger door    4
1               I               dashboard         5
2               I               gear box          6 

person Beanie    schedule 07.12.2012    source источник
comment
не могли бы вы предоставить некоторые образцы данных для того же? Я думаю, мы можем декодировать, но нужно проверить образцы данных.   -  person Ajith Sasidharan    schedule 07.12.2012
comment
+1 Аджит Хотелось бы, чтобы он просто добавил свой вопрос со схемой таблицы и примерами данных.   -  person bonCodigo    schedule 07.12.2012
comment
@AjithSasidharan Я добавил некоторые данные в конце. надеюсь это поможет   -  person Beanie    schedule 07.12.2012


Ответы (1)


Да, вы очень близки, у меня есть похожий код, и мой выглядит так и работает :)
Это, очевидно, имеет вложенные правила, но все принципы одинаковы для ELSE, я не думаю, что есть ИНАЧЕ, ЕСЛИ...

CASE WHEN
    RULE_1 = TRUE THEN 
        CASE WHEN RULE_2 = TRUE AND RULE_3 = TRUE THEN
            CASE WHEN 
                RULE_4 = TRUE
            THEN 
                ITEM_1
            ELSE 
                ITEM_2
            END
        ELSE
            CASE WHEN RULE_5 THEN
                ITEM_3
            ELSE
                CASE WHEN RULE_6 = TRUE THEN 
                    ITEM_4
                ELSE
                    ITEM_5
                END
            END 
        END
END
person dan richardson    schedule 07.12.2012
comment
Я пытался добавить условия по-другому, но я не совсем понимаю. его почти там, но не цитировать там. - person Beanie; 07.12.2012
comment
@Beanie, почему бы вам не обновить вопрос, указав, что вы пробовали до сих пор, может быть, это поможет нам помочь вам в дальнейшем :) - person bonCodigo; 07.12.2012
comment
@bonCodigo, я добавил код, который работает, но также дает мне все типы. надеюсь это поможет - person Beanie; 08.12.2012