#sql #sql-server #tsql
#sql #sql-сервер #tsql
Вопрос:
У меня есть таблица A и таблица B в SQL SERVER. Я хочу сравнить некоторые столбцы строки из каждой таблицы и вернуть разные значения из таблицы A. Как мне это сделать?
Пример :
TABLE A
columns : id txt1 txt2 txt3
values : 1 XY XX XXY
TABLE B
columns : id txt1 txt2 txt3 txt4
values : 1 XZ XX XYZ XXX
Я хочу результат:
TABLE A
txt1 txt3
XY XXY
Ответ №1:
Это слишком долго для комментария.
SQL-запрос возвращает фиксированный набор столбцов. Итак, вы не можете делать то, что хотите. Динамический SQL даже не работает, потому что разные строки могут иметь разные наборы столбцов.
Вы могли бы сделать что-то вроде NULL
out значения, которые являются одинаковыми:
select a.id,
nullif(a.txt1, b.txt1) as txt1,
nullif(a.txt2, b.txt2) as txt2,
nullif(a.txt3, b.txt3) as txt3,
nullif(a.txt4, b.txt4) as txt4
from a left join
b
on a.id = b.id;
Или перечислите имена столбцов, которые отличаются:
select a.id,
concat_ws(',',
(case when a.txt1 = b.txt1 then 'txt1' end),
(case when a.txt2 = b.txt2 then 'txt2' end),
(case when a.txt3 = b.txt3 then 'txt3' end),
(case when a.txt4 = b.txt4 then 'txt4' end)
)
from a left join
b
on a.id = b.id;