Как добавить новый столбец на основе чужого значения - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть следующий запрос SQL, который отлично подходит для извлечения всех наших закупленных и изготовленных деталей:

WITH purchasedItems AS
(
    SELECT DISTINCT
        'BUY' as MAKE_BUY, PART_NUMBER AS NUMBER

    FROM
        PURCHASES

    WHERE
        ORDER_CREATED_DATE >= (SYSDATE-(365 * 3))
),

madeItems AS
(
        SELECT DISTINCT
            'MAKE' AS MAKE_BUY, FILE_PART_NUMBER AS NUMBER

    FROM
        OPERATIONS

    WHERE
        (FILE_CREATED_DATE >= (SYSDATE-(365*3)))
)

SELECT purchasedItems.*
FROM purchasedItems

UNION

SELECT madeItems.*
FROM madeItems

, который хорошо работает при получении таких данных, как:

| MAKE_BUY | NUMBER    |
|----------|-----------|
| Buy      | 1215DE-AA |
| Buy      | 7545IO-EE |
| Buy      | 1214MN-QQ |
| Buy      | 1555XC-DD |
| Make     | 3232EW-UU |
| Make     | 4548GB-II |
| Make     | 7477LA-AA |
| Buy      | 9988NM-OO |
| Buy      | 5624QZ-QQ |
| Make     | 4444BA-BB |

Тем не менее, я ищу поворот.Мне нужно создать новый столбец (как я сделал для MAKE_BUY), чтобы добавить, по существу, оператор if, который говорит:

if program_code LIKE '%SEERS%' THEN 'SEERS' as PROGRAM
ELSE IF program_code LIKE '%HP%' THEN 'HP' as PROGRAM

Я попытался добавить в свою программу следующее:

(CASE WHEN (program_code LIKE '%SEERS%') THEN 'SEERS' as PROGRAM)

но это не сработало.Я получаю сообщение об ошибке ORA-00905: отсутствует ключевое слово.

Я бы хотел, чтобы оно по сути выглядело так:

| MAKE_BUY | NUMBER    | PROGRAM |
|----------|-----------|---------|
| Buy      | 1215DE-AA | SEERS   |
| Buy      | 7545IO-EE | HP      |
| Buy      | 1214MN-QQ | HP      |
| Buy      | 1555XC-DD | HP      |
| Make     | 3232EW-UU | HP      |
| Make     | 4548GB-II | HP      |
| Make     | 7477LA-AA | HP      |
| Buy      | 9988NM-OO | HP      |
| Buy      | 5624QZ-QQ | SEERS   |
| Make     | 4444BA-BB | HP      |

Я не нашел ресурсов, позволяющих использовать кейс.-при утверждении при создании нового столбца.

Спасибо за помощь.

Ответы [ 3 ]

1 голос
/ 03 апреля 2019

ваш case должен выглядеть так:

CASE 
  WHEN (program_code LIKE '%SEERS%') THEN 'SEERS' 
  when program_code LIKE '%HP%' THEN '%HP%'
  else '??'
end as PROGRAM
0 голосов
/ 03 апреля 2019

Если вы хотите проверить только 2 условия, то я думаю, что вам нужно:

case 
  when program_code like '%SEERS%' then 'SEERS' 
  when program_code like '%HP%' then 'HP'
end as PROGRAM

, но это означает, что для любого другого случая этот столбец будет null.В опубликованных вами результатах я вижу только значение 'HP' и никаких значений, содержащих 'HP' в качестве подстроки.Если это так, то вам не нужно:

program_code like '%HP%'

, просто

program_code = 'HP'

более эффективно.То же относится и к 'SEERS'.Так что, возможно, вы можете упростить до:

case when program_code in ('SEERS', 'HP') then program_code end as PROGRAM
0 голосов
/ 03 апреля 2019

Скорее всего, вам нужно добавить ключевое слово END в конец вашего дела.Вот так:

(CASE WHEN (program_code LIKE '%SEERS%') THEN 'SEERS' END as PROGRAM)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...