CASE: выберите значение в столбце B на основе условия в столбце A - PullRequest
0 голосов
/ 27 марта 2019

У меня есть таблица со значениями.Значения дублируются на основе значений в столбце B (различные представления данных).Кажется, я не могу выбрать значение, основанное на условии (если значение в столбце A начинается с XX или YY, затем выберите FIN, иначе выберите PO)

Я пробовал "if" и "case", но могу "t заставить что-либо работать

Table

Code Geoview Metric         
XX1000  FIN 10
XX1000  PO  10
YY1800  FIN 20
YY1800  PO  20
TT2000  PO  35
TT2500  PO  50



`CASE 
    WHEN [Code] = '%XX' and [Code] = '%YY' 
    THEN [Geoview] = 'FIN' 
    ELSE [Geoview] = 'PO' 
    END`

Если код начинается с XX или YY, вернуть строку с FIN в режиме гео, в противном случае получить PO (только FIN или PO в качестве доступных значений)

Ответы [ 4 ]

1 голос
/ 27 марта 2019

С LIKE и этим шаблоном 'XX%', что означает начало с 'XX':

select 
  Code,  
  CASE 
    WHEN Code LIKE 'XX%' OR Code LIKE 'YY%' THEN 'FIN' 
    ELSE 'PO' 
  END Geoview,
  Metric
FROM mytable

или с LEFT():

select 
  Code,  
  CASE 
    WHEN LEFT(Code, 2) IN ('XX', 'YY') THEN 'FIN' 
    ELSE 'PO' 
  END Geoview,
  Metric
FROM mytable
0 голосов
/ 28 марта 2019

Вы можете использовать CASE для создания сложных реляционных условий в вашем предикате, но для повышения производительности может быть лучше кодировать его более простым способом.

SELECT * 
  FROM table
  WHERE  
       ( CASE 
          WHEN left(code,2) IN ('XX', 'YY') and geoview = 'PO'  THEN 0
          WHEN left(code,2) IN ('XX', 'YY') and geoview = 'FIN' THEN 1 
          WHEN geoview = 'PO' THEN 1
          ELSE 0
        END ) > 0
0 голосов
/ 27 марта 2019

попробуйте как ниже

      select code,case when code like '%XX' or '%YY'
       then 'FIN' 
       else 'PO' emd as geo from table_name
0 голосов
/ 27 марта 2019

для строки, начинающейся с XX или YY, используйте LIKE XX% и LIKE YY%

и для проверки оба используют ИЛИ вместо И

CASE 
   WHEN [Code] LIKE 'XX%' OR [Code] LIKE  'YY%' 
    THEN [Geoview] = 'FIN' 
    ELSE [Geoview] = 'PO' 
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...