#sql #sql-server
Вопрос:
Есть ли способ объединить эти таблицы в одну? Идея заключается в том, что запрос идентифицирует те, которые уже существуют во второй таблице, а затем обновляет эти строки в конечной таблице.
Я знаю очень простой SQL, левое соединение не решает проблему, объединение усложняет ее, и я очень запутался, используя «СУЩЕСТВУЕТ», также я не уверен, следует ли мне использовать в качестве условия соединения varchar.
Желаемый результат был бы примерно таким:
Весь | Раздел | ЭсКонСита | ЭсАнтиципада | ЭсАтрасада |
---|---|---|---|---|
0 | Enero | 0 | 0 | 0 |
42 | Febrero | 42 | 0 | 0 |
0 | Marzo | 0 | 0 | 0 |
0 | Абриль | 0 | 0 | 0 |
17 | Mayo | 12 | 3 | 2 |
12 | Junio | 12 | 0 | 0 |
DECLARE @Base TABLE (
Total INT
,Section VARCHAR(20)
,EsConCita TINYINT
,EsAnticipada TINYINT
,EsAtrasada TINYINT
)
INSERT INTO @Base
values ( 0, 'Enero', 0, 0, 0),
( 0, 'Febrero', 0, 0, 0),
( 0, 'Marzo', 0, 0, 0),
( 0, 'Abril', 0, 0, 0),
( 0, 'Mayo', 0, 0, 0),
( 0, 'Junio', 0, 0, 0)
DECLARE @aux TABLE (
Total INT
,Section VARCHAR(20)
,EsConCita TINYINT
,EsAnticipada TINYINT
,EsAtrasada TINYINT
)
INSERT INTO @aux
values
( 42, 'Febrero', 42, 0, 0),
( 17, 'Mayo', 12, 3, 2),
( 12, 'Junio', 12, 0, 0)
Комментарии:
1. Регистрация по названию месяца (раздела)? Копировать данные из aux в базу? Только существующие строки, не вставляя новые, которые существуют в aux, но не являются базовыми? И, наконец, вы действительно используете такую древнюю версию sql server?
Ответ №1:
Кажется, вы хотите left join
, а затем берете ценность, @aux
если она существует:
select coalesce(nullif(a.total, 0), b.total, 0), b.section,
coalesce(nullif(a.EsConCita, 0), b.EsConCita, 0) as EsConCita,
coalesce(nullif(a.EsAnticipada, 0), b.EsAnticipada, 0) as EsAnticipada,
coalesce(nullif(a.EsAtrasada, 0), b.EsAtrasada, 0) as EsAtrasada
from @base b full join
@aux a
on b.section = a.section
Ответ №2:
Запрос, который, я думаю, вам нужен, прост join
update b set
b.Total=a.total,
b.EsConCita=a.EsConCita,
b.EsAnticipada=a.EsAnticipada,
b.EsAtrasada=a.EsAtrasada
from @base b join @aux a on a.Section=b.Section