Я пытаюсь объединить две таблицы SQL: родительскую (которую я полностью контролирую) и дочернюю (которую я не могу изменить). Я изменил родительскую таблицу, чтобы в ней был столбец varchar, содержащий список идентификаторов дочерних записей CSV. Теперь я хотел бы сделать выборку, возвращающую по одной строке на каждого родителя, и некоторые счетчики повторно. дети (т.е. сколько детей имеют «статус» истины).
Первоначально я думал, что смогу преобразовать список CSV в строку Xml, привести его к столбцу типа Xml и присоединиться к дочерней таблице, используя "узлы" Xml - но я не могу получить синтаксис правый.
Кто-нибудь может подсказать, как это можно сделать?
Спасибо,
Росс
(вот с чем я играл)
declare @true bit; set @true = ~0
declare @false bit; set @false = 0
declare @parent table (id int, children varchar(max))
declare @child table (id int, status bit)
insert into @parent values (1,'1,2,3')
insert into @child values (1,@true)
insert into @child values (2,@false)
insert into @child values (3,@false)
;with parent as
(
select id as 'parentId', cast('<children><child id="' + replace (children,',','"/><child id="') + '"/></children>' as xml) as 'children' from @parent
)
select parentId, t2.child.query('.')
from parent
--join @child as child on (child.id = ??)
cross apply children.nodes('/children/child') as t2(child)