2015-03-06 3 views
0

У меня есть SQL с некоторыми условиями, например:условия Сокращенно SQL

SELECT 
    CASE WHEN RIGHT(CAST(COLUMN_A as nvarchar(max)),1) = '.' THEN 
    SUBSTRING (COLUMN_A, DATALENGTH(COLUMN_A) - 4, 4) ELSE 
    SUBSTRING (COLUMN_A, DATALENGTH(COLUMN_A) - 3, 4) END AS COL_1 

В то же выбрать меня есть другие чек, используя правило выше, и я должен повторить все это. Я ищу способ, чтобы не повторить остальную часть кода, что-то вроде :

CASE 
    WHEN COL_1 LIKE 'AAAA' OR 
    COL_1 LIKE 'BBBB' OR 
    COL_1 LIKE 'CCCC' OR 
    COL_1 LIKE 'DDDD' THEN 1 ELSE 0 END AS Code 

Используя результат col_1 выше делать другие проверки. Как я могу это сделать? Благодарю.

ответ

1

Вы можете использовать вложенные ВЫБЕРИТЕ команду:

SELECT CASE 
    WHEN x.COL_1 LIKE 'AAAA' OR 
    x.COL_1 LIKE 'BBBB' OR 
    x.COL_1 LIKE 'CCCC' OR 
    x.COL_1 LIKE 'DDDD' THEN 1 ELSE 0 END AS Code 
FROM (
SELECT 
    CASE WHEN RIGHT(CAST(COLUMN_A as nvarchar(max)),1) = '.' THEN 
    SUBSTRING (COLUMN_A, DATALENGTH(COLUMN_A) - 4, 4) ELSE 
    SUBSTRING (COLUMN_A, DATALENGTH(COLUMN_A) - 3, 4) END AS COL_1 
) x 
1
SELECT * 
FROM (
     SELECT list_of_columns 
      , CASE WHEN this=cool THEN 1 ELSE 0 END As computed_column 
     FROM ... 
     ) As a_subquery 
WHERE computed_column = 1 
1

СЛУЧАЙ Синтаксис должен быть таким:

CASE 
    WHEN COL_1 LIKE 'AAAA' THEN 1 
    WHEN COL_1 LIKE 'BBBB' THEN 1 
    WHEN COL_1 LIKE 'CCCC' THEN 1 
    WHEN COL_1 LIKE 'DDDD' THEN 1 
ELSE 0 
END AS Code 
1

выворачивают наизнанку, то есть выполнить случай подстроки:

SELECT 
    SUBSTRING (COLUMN_A, DATALENGTH(COLUMN_A) - 
    CASE WHEN RIGHT(CAST(COLUMN_A as nvarchar(max)),1) = '.' THEN then 4 else 3 end, 4) AS COL_1 

и использовать IN для разных значений, проверьте длину, если это необходимо (LIKE и завершающие пробелы ...)

CASE 
    WHEN COL_1 IN ('AAAA','BBBB','CCCC','DDDD') and LENGTH(col_1) = 4 THEN 1 
    ELSE 0 END AS Code 
Смежные вопросы