Ввод SQL в таблицу SELECT отличается от фактических данных таблицы, основываясь на выражении if - PullRequest
0 голосов
/ 14 марта 2019

Я новичок в SQL, но не смог найти хороший способ сделать то, что я пытаюсь сделать здесь.

Цель: ввести в столбец данные, отличные от тех, которые обычно извлекаются с помощью SELECT, исходя из критериев

В приведенном ниже примере мне нужны все данные в столбце A таблицы 1, но я хочу заменить все экземпляры 'C' на 'X'.

IE:
Table 1            Table 2
----------------------------
| A  |  B |       | A  | C |
-------------------------------
| y  | 5  |       | y  | 17 |
-------------------------------
| z  | 2  |       | z  | 8 |

Выбранные данные:

--------------
| C  |  
------------
| X  | 
------------
| 8  | 



SELECT
t.C

FROM Table1 t with(nolock)
INNER JOIN Table2 tp with (nolock)
ON tp.A = t.A

WHERE t.a in ('y', 'z')

(В этом примере утверждение WHERE может показаться немного странным, когда я пытаюсь перевести мой код на работе на не примирительный язык, и я только на 70% понимаю, что я делаю с этим)

Основная идея заключается в том, что я выбрал данные в столбце «C», но заменил экземпляр данных «17» значением «X». Написанный код не будет выполнять эту замену, просто хотел структуру, которая у меня есть сейчас. Обратите внимание, что это просто изменяет данные в таблице выбора, но НЕ обновляет данные таблицы 2 на сервере.

Любая помощь будет оценена, спасибо!

=================================

Решение, используемое благодаря Barmar

SELECT
t.A,
CASE WHEN (t.C = 17), THEN 'X' else t.C END [Title of Column]

И остальное утверждение было таким же. Обратите внимание, что это НЕ РАБОТАЕТ с приведенным выше примером, хотя, потому что данные столбца C являются числами, и я хочу заменить их на символ 'X'. Вы можете либо заменить его тем же типом данных, либо в инструкции ELSE по умолчанию заменить этот столбец «каким-либо другим строковым значением», и он будет работать.

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Используйте IF или CASE

SELECT IF(t2.C = 17, 'X', t2.c) AS C
FROM Table1 AS t1
JOIN Table2 AS t2 ON t1.A = t2.A
WHERE t1.A IN ('y', 'z')

SELECT CASE t2.C
        WHEN 17 THEN 'X'
        ELSE t2.C
       END AS C
FROM Table1 AS t1
JOIN Table2 AS t2 ON t1.A = t2.A
WHERE t1.A IN ('y', 'z')
0 голосов
/ 14 марта 2019

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

with T1 as (select 'y' as A, '5' as B from dual
               union select 'z', '2' from dual),
T2 as (select 'y' as A, '17' as C from dual
            union select 'z', '8' from dual)
select decode(T2.C, 17, 'X', T2.C) from T1
inner join T2 on T1.A = T2.A
where T1.A in ('y', 'z');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...