2013-10-21 17 views
0

我不確定我的問題甚至措辭正確,因爲我嘗試了SO的建議帖子,但沒有完全找到我正在尋找。SQL創建一個單行,其中包含幾個相關行的連接表中的查詢值

簡而言之,我試圖展示一個公民屬於哪個「區域」。每個公民將與3個區域相關聯:Borough,NeighbourhoodNatural Neighbourhood。公民通過連接表連接到每個區域。

我只需要一行(針對數據庫中的每個公民)顯示它們所屬的所有區域。

的目標是這樣的:

CitizenId CitizenName Borough  Neighbourhood  NaturalNeighbourhood 
---------------------------------------------------------------------------- 
1   Fred   Elmbridge Esher & Claygate Esher 

涉及如下所示的表。

公民

ID Name 
1 Fred 

AreaCategory

ID Value 
1 root 
2 Division 
3 Borough 
4 Neighbourhood 
5 Natural Neighbourhood 

AreaType

ID FK_AreaCategory Value 
1 3     Elmbridge 
2 4     Esher & Claygate 
3 5     Esher 

個CitizenAreas

FK_Citizen FK_AreaType 
1   3 
1   4 
1   5 

沒有人誰知道他們的東西,但我不知道如何處理這是毋庸置疑的簡單。

在此先感謝。

謝謝@podiluska。我現在有這個稍微重新使用我的數據庫中的確切表名稱。我最初收到錯誤:

「pivot'附近的語法不正確您可能需要將當前數據庫的兼容級別設置爲更高的值才能啓用此功能,請參閱ALTER DATABASE的SET COMPATIBILITY_LEVEL選項的幫助。 「

然後我檢查並看到數據庫顯示爲SQL Server 2000兼容。當我改變這與SQL Server 2008兼容的一切工作。

USE ACRM 
GO 
select 
    * 
from 
(
select c.ID, FirstName, at.Value as area, ac.value as category 
from 
ACRM.DBO.ActiveCitizen c 
    inner join ACRM.DBO.ActiveCitizenAreas ca on c.Id = ca.FK_ActiveCitizen 
    inner join ACRM.DBO.AreaType at on ca.FK_AreaType = at.ID 
    inner join ACRM.DBO.AreaCategory ac on at.FK_AreaCategory = ac.id 
) v 
pivot (max(area) for category in (Borough, Neighbourhood, [Natural Neighbourhood])) p 

謝謝。

回答

2

使用pivot

select 
    * 
from 
(
select c.ID, Name, at.Value as area, ac.value as category 
from 
    citizen c 
     inner join citizenAreas ca on c.Id = ca.FK_Citizen 
     inner join areatype at on ca.FK_AreaType = at.ID 
     inner join areaCategory ac on at.FK_AreaCategory = ac.id 
) v 
pivot (max(area) for category in (Borough, Neighbourhood, [natural neighbourhood])) p 
+0

非常感謝。我很高興我發佈了...我甚至不知道'數據透視',我必須做一些教程。我收到以下錯誤 - 我在SQL Server 2008上。「」PIVOT「附近的語法不正確。您可能需要將當前數據庫的兼容級別設置爲更高的值......」 – ChrisCurrie

+0

@ user975516您可能錯誤地鍵入了。在SQL 2008中,這應該沒問題,除非您已將兼容級別設置爲SQL 2000或其他。 – podiluska

+0

謝謝,對不起,我剪切和粘貼,我看不出任何區別,雖然我重命名錶匹配。我將編輯我的原始問題以顯示我現在擁有的內容。再次感謝。 – ChrisCurrie

相關問題