SOの提案された投稿を試したので、私の質問が適切に表現されているかどうかはわかりませんが、探していたものが見つかりませんでした.
一言で言えば、私は市民がどの「地域」に属しているかを示そうとしています。Borough
すべての市民は、 、 、 のNeighbourhood
3つのエリアに関連付けられNatural Neighbourhood
ます。市民は、結合テーブルによって各エリアにリンクされています。
市民が属するすべての地域を示す 1 行 (データベース内の市民ごと) だけが必要です。
目標はこれです:
CitizenId CitizenName Borough Neighbourhood NaturalNeighbourhood
----------------------------------------------------------------------------
1 Fred Elmbridge Esher & Claygate Esher
関連するテーブルを以下に示します。
市民
ID Name
1 Fred
エリアカテゴリー
ID Value
1 root
2 Division
3 Borough
4 Neighbourhood
5 Natural Neighbourhood
エリアタイプ
ID FK_AreaCategory Value
1 3 Elmbridge
2 4 Esher & Claygate
3 5 Esher
市民エリア
FK_Citizen FK_AreaType
1 3
1 4
1 5
自分のことを知っている人にとっては間違いなく簡単ですが、どのようにアプローチすればよいかわかりません。
前もって感謝します。
ありがとう@podiluska。これは、データベース内の正確なテーブル名を使用するために少し作り直されました。最初にエラーを受け取りました:
「「ピボット」付近の構文が正しくありません。この機能を有効にするには、現在のデータベースの互換性レベルをより高い値に設定する必要がある場合があります。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
ありがとう。