2011-08-23 79 views
0

我試過尋找這個問題,但是發現沒有什麼相關的。所以這裏去...把兩張桌子和一個鏈接表變成一張大桌

我有三個表,極度簡化版本,其中有:

從業者:

  • practitioner_id :: int
  • name :: nvarchar

保險:

  • insurance_id :: int
  • name :: nvarchar

InsuranceLink:

  • practitioner_id :: int
  • insurance_id :: int

因此,從業者表包含從業者列表,保險表包含保險列表,並且鏈接表表示哪個從業者支持哪種保險。

現在,我需要建立一個能夠顯示這樣的信息的視圖:

ViewTable:

  • practitioner_id :: int
  • practitioner_name :: nvarchar
  • insurance_1 :: bit
  • insurance_2 :: bit .. ...
  • insurance_100 :: bit

換句話說,在視圖中列有ID和從業者名稱,以及每一個在保險存在(與保險名稱作爲列名保險(有一個強制性條件,保險名稱是唯一的))。保險欄中的單元格將指示該從業人員是否支持該保險。

有沒有辦法做到這一點?

或者更好的是,是否可以在VB.NET表單上的DataSet上使用Excel風格的數據透視表?這也將解決我的許多問題。

+0

ViewTable中的'practitioner_name'很可能是**而不是** int列 - 對嗎? –

+0

是的,practitioner_name是nvarchar。 – Morglor

回答

2

PIVOT是您正在查找的關鍵字。

select * from 
    (select 
     practitioner_id, 
     practitioner_name, 
     insurance_name 
    from practitioner p 
    join insurancelink il on p.practitioner_id = il.practitioner_id 
    join insurance i on il.insurance_id = i.insurance_id 
    ) 
pivot (count(*) for insurance_name in ([insurancename1],[insurancename2], ..., [insurancename100])) 

我知道,現在你想知道是否有任何方式,以避免上市的所有保險公司名稱/有它不是一個恆定的名單。答案是,幾乎沒有。您可以編程方式創建視圖,但添加保險時視圖仍然需要更新。