Извиняюсь за ужасное название, но я не знаю, как это легко описать. У меня есть следующий запрос, который возвращает 53 строки:
select distinct
p.building_name as 'Building',
p.building_id as 'ID',
p.state as 'State',
d.division_code + ' - ' + d.division_name as 'Division',
isnull(r.entity_id, 'None') as 'Entity Code'
-- isnull(cc.cost_centre, 'None') as 'Cost Centre'
from property.property p
left outer join property.division d on p.division_code = d.division_code
left outer join report_temp.entity_building r on p.building_id = r.building_id
--left outer join property.cost_centre cc on cc.entity_id = r.entity_id
order by p.building_name asc
Когда я раскомментирую вышеперечисленные объединения, код становится следующим, и я получаю 695 строк, так как на код сущности приходится несколько центров затрат:
select distinct
p.building_name as 'Building',
p.building_id as 'ID',
p.state as 'State',
d.division_code + ' - ' + d.division_name as 'Division',
isnull(r.entity_id, 'None') as 'Entity Code',
isnull(cc.cost_centre, 'None') as 'Cost Centre'
from property.property p
left outer join property.division d on p.division_code = d.division_code
left outer join report_temp.entity_building r on p.building_id = r.building_id
left outer join property.cost_centre cc on cc.entity_id = r.entity_id
order by p.building_name asc
Что я хотел бы сделать, так это отобразить результаты столбца CostCentre в виде сцепленных результатов, чтобы я получил только 53 строки результатов. Объясним немного лучше - когда все остальные столбцы одинаковы, но для каждого кода сущности имеется четыре разных центра затрат, столбец центра затрат будет отображаться как «1111, 1112, 1113» в одном столбце.
Имею ли я смысл? Возможно ли это?
изменить (объяснить лучше):
т.е.
Building ID Cost Centres
20001 1111, 1112, 1113
Вместо
Building ID Cost Centre
20001 1111
20001 1112
20001 1113
Редактировать (с ответом):
Закончилось решением этой проблемы со следующим. Попытка также сделать попытку рекурсивного CTE и опубликует это после завершения ради интересов:
with cte_building_data as
(
select distinct
p.building_name,
p.building_id,
p.state as 'State',
d.division_code + ' - ' + d.division_name as 'Division',
isnull(r.entity_id, 'None') as entity_id,
isnull(cc.cost_centre, 'None') as cost_centre
from property.property p
inner join property.division d on p.division_code = d.division_code
inner join report_temp.entity_building r on p.building_id = r.building_id
inner join property.cost_centre cc on cc.entity_id = r.entity_id
)
SELECT
d.*
,
(select stuff
(
( SELECT ', ' + a.cost_centre
FROM
( SELECT a.cost_centre, a.[entity_id] FROM cte_building_data a
WHERE a.[entity_id] = d.[entity_id]
) a
FOR XML PATH(''))
, 1, 2, ''
) AS cc_list)
FROM (
SELECT
d.entity_id,
d.[State],
d.[Division]
FROM cte_building_data d
GROUP BY
d.entity_id,
d.[State],
d.[Division]
) d