Я використовую об'єднання і об'єднання для отримання данихкілька таблиць в SQL. У мене є рядки з дублюючими ідентифікаторами, і мені потрібно повернути лише верхні рядки цих рядків дубльованих ідентифікаторів і поєднати дані в певному стовпці у всіх дубльованих рядках в один стовпець верхнього рядка. Я не можу використовувати max (createDate), тому що вони також повторюються у датах.
Це моя збережена процедура:
select distinct
table1.*,
table2.*
from
calsses table1
inner join documents table2 on table1.ID = table2.ID
union all
select distinct
table3.*,
table2.*
from
exams table3
inner join documents table2 on table3.ID = table2.ID
order by table2.Date desc
Це результат:
Коли я запускаю цю збережену процедуру, я отримую рядки з повторюваними ідентифікаторами.
Як я можу повернути один рядок з усіх дубльованих рядків і об'єднати дані в стовпці "Іспити" у повторюваних рядках до стовпця "Іспити" в одному повернутому рядку?
Порадьте, будь ласка. Дякую.
Відповіді:
0 для відповіді № 1я думаю що XML PATH
це ваша заява.
Якщо я занижу ваше запитання, у вас є два однакових рядки і у вас немає поля, щоб вибрати його. Таким чином, ви один з цих рядків, але з Address
поле згруповано.
select *,
STUFF((SELECT "; " + US.USR_NAME
FROM table_where_is_address twis
WHERE twis.ID = aux.ID_to_join_with_correct_row
FOR XML PATH("")), 1, 1, "") as grouped_address
from (
select distinct
table1.*,
table2.*
from calsses table1
inner join documents table2 on table1.ID = table2.ID
union all
select distinct
table3.*,
table2.*
from exams table3
inner join documents table2 on table3.ID = table2.ID
order by table2.Date desc
) aux
Це змінено для вашої моделі даних має працювати.
0 для відповіді № 2
Хороша стаття для об'єднання значень рядків https://www.red-gate.com/simple-talk/sql/t-sql-programming/concatenating-row-values-in-transact-sql/