恐ろしいタイトルのために謝罪しますが、私はこれを簡単に説明する方法は考えていません。私は、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行の結果しか受け取らないということです。もう少し説明すると、他の列はすべて同じですが、エンティティコードごとに4つの異なるコストセンターがある場合、コストセンターの列は1つの列に「1111,1112,1113」と表示されます。
私は意味がありますか?これは可能ですか? (よりよく説明する)
編集:代わりに
Building ID Cost Centre
20001 1111
20001 1112
20001 1113
の
すなわち
Building ID Cost Centres
20001 1111, 1112, 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
あなたはcc.division_code = d.divison_codeのような条件を追加する必要があります。 – Arasu
テーブルの制約内ではできません。私は恐れます(更新できる位置にはありません) – Codingo