道歉的恐怖標題,但我不知道如何描述這個很容易。我有以下查詢返回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
你需要添加條件像cc.division_code = d.divison_code或類似的東西 – Arasu 2011-12-19 04:20:50
不可能在表的約束內恐怕(而不是在我可以更新它們的位置) – Codingo 2011-12-19 04:23:35