Мне нужно создать ВИД из существующей ТАБЛИЦЫ и КАРТУ дополнительной КОЛОННЫ к этому ВИДУ - PullRequest
0 голосов
/ 25 октября 2019

Я довольно новичок в SQL. Что я пытаюсь сделать, это создать представление из существующей таблицы. Мне также нужно добавить в представление новый столбец, который сопоставляется со значениями существующего столбца в таблице.

Таким образом, в представлении, если значение в поле для Col_1 = A, тогда значение всоответствующая строка для New_Col = C и т. д.

Имеет ли это смысл? Буду ли я использовать предложение CASE? Возможно ли картографирование таким образом?

Спасибо

Ответы [ 3 ]

1 голос
/ 25 октября 2019

Лучший способ сделать это - создать таблицу сопоставления или поиска

Например, рассмотрим следующую таблицу LOOKUP.

COL_A NEW_VALUE
----  -----
A     C
B     D

Тогда вы можете получить запрос, подобный этому:

 SELECT A.*, LOOK.NEW_VALUE
 FROM TABLEA AS A
 JOIN LOOKUP AS LOOK ON A.COL_A = LOOK.COL_A

Это то, что DimaSUN делает и в своем запросе - но в его случае он динамически создает таблицу в теле запроса.

Также обратите внимание, я используюJOIN (который является внутренним соединением), поэтому будут возвращены только результаты в таблице поиска. Это может отфильтровать результаты. LEFT JOIN вернул бы все данные из A, но некоторые из новых столбцов могут быть нулевыми.

0 голосов
/ 25 октября 2019

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

  Create View viewname as 
     Select *, 
           case when column=a.value then 'C' 
             .... 
             ELSE
           END 
     FROM ( Select * from table) a 
0 голосов
/ 25 октября 2019

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

select T.*,map.New_Col 
from ExistingTable T
left join ( 
  values 
   ('A','C')
  ,('B','D')
) map (Col_1,New_Col) on map.Col_1 = T.Col_1

В этом примере вы жестко закодировали 'A' -> 'C' и 'B' -> 'D'

В общем случае Вам лучше использовать дополнительную таблицу (см. Ответ Хогана)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...