Вход :
Select * from new_table
Select * from Old_table
кеш здесь, мы не можем изменить данные таблицы new_table/old_table, например
https://stackoverflow.com/questions/13237623/copy-data-into-another-table.
Нам нужно перенести данные WDR в новую таблицу.
Output
результата жду
select * from Dummy
Так как это миграция, то идентифицированные данные WDR
. В этом случае мы должны спроектировать/изменить приведенный ниже код таким образом, чтобы он принимал существующие данные из текущей Old_table + перенесенные данные из new_table.
code which I am trying
create View Dummy
As
with input As
(
Select Distinct Code =ne.Code,
name =ne.name
db_name =CAST('New' as char(3))
from new_table As ne
where name like '%WDR%'
Union All
select Distinct code =ol.Code,
name =ol.name
db_name =CAST('old' as char(3))
from old_table As ol
),
data As
(
select code=input.code,
name=input.name,
ranking=Row_Number() over(partition by code order by db_name DESC)
from input
)
Select code =data.code,
name =data.name
db_name =data.db_name
from data
where data.ranking=1;
please amended the code.
@P.Salmon есть только код MySQL, но я все еще получаю сообщение об ошибке отступа, когда пытаюсь добавить свой код.
В этом случае бросьте GO.
@P.Salmon нет проблем, мы можем бросить GO
@P.Salmon Я добавил код, который я пытаюсь использовать в самом вопросе.
Я озадачен, почему вы решили, что представление будет здесь полезным. Вам нужна вставка..выбор, за которой следует удаление (как отдельные операторы) или, возможно, удаление старого с триггером для нажатия удаленного на новый.
@P.Salmon наши требования таковы, поэтому мы должны изменить существующее представление, чтобы прочитать данные.
Представление не может переносить данные, оно может только представить их, поэтому вы никогда не сможете получить 3 строки в таблице a и 1 в таблице b, используя этот метод, или вопрос представлен неправильно.
Давайте продолжим обсуждение в чате.
Я был немного озадачен желаемым результатом, но теперь, когда вы его исправили, я полагаю, вам нужно следующее: Для каждого кода вам нужна одна запись в таблице результатов. Желательно из новой таблицы, иначе из старой таблицы. Если код не соответствует шаблону Snnn, вам нужен новый номер S для него. Правильный?
@ThorstenKettner да, вы правы, за исключением того, что шаблон соответствия - WDR,
Ах хорошо. Да, вы хотите только WDR из новой таблицы. Ваш запрос уже очень близок к решению, кажется. Только то, что ваш запрос ошибочно предпочитает старый новому и не изменяет коды, которые не соответствуют Snnn. Да?
@ThorstenKettner Я отредактировал ввод для лучшего понимания, взяв запись из new_table, только если «WDR» присутствует в столбце «Имя» и запись в таблице результатов
Хм, хорошо. Теперь нет никакого изменения кодекса больше. Вы просто берете все строки WDR из new_table плюс все строки из old_table, код которых не существует в new_table. Если вы исправите синтаксические ошибки в своем запросе, вам нужно всего лишь изменить order by db_name DESC
на order by db_name
, чтобы получить этот результат. Но вы можете добиться того же с гораздо более простым запросом. Пожалуйста, смотрите мой ответ по этому поводу.
В вашем запросе отсутствуют только несколько запятых, столбец db_name отсутствует в ваших данных, и ORDER BY db_name DESC
там, где он должен быть ORDER BY db_name ASC
.
Кроме того, DISTINCT
, вероятно, не нужен в вашем запросе, и нет необходимости давать столбцу псевдоним, соответствующий имени столбца.
Что осталось
create view dummy as
with input as
(
select
code,
name,
'new' as db_name
from new_table
where name like '%WDR%'
union all
select
code,
name,
'old' as db_name
from old_table
),
data As
(
select
code,
name,
db_name,
row_number() over(partition by code order by db_name) as ranking
from input
)
select
code,
name,
db_name
from data
where data.ranking = 1;
Что также можно записать как
create view dummy as
select code, name, 'new' as db_name
from new_table
where name like '%WDR%'
union all
select code, name, 'old' as db_name
from old_table
where code not in (select code from new_table);
Демо: https://dbfiddle.uk/7C4g3V9_
я хочу всю запись старой таблицы + WDR из новой _table. В этом ответе в наборе результатов отсутствует строка кода S004.
Нет, не пропало. Пожалуйста, посмотрите демонстрацию, на которую я ссылаюсь в своем ответе.
ИДТИ? sql-сервер вы правильно пометили?