将两个表和一个链接表转换成一个大表

时间:2011-08-23 15:41:38

标签: sql vb.net sql-server-2005 pivot-table linktable

我试着寻找这个问题,但没有发现任何相关内容。所以这里......

我有三张桌子,其简化版本是:

执业:

  • 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样式的数据透视表?这也解决了我的许多问题。

1 个答案:

答案 0 :(得分: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]))

我知道现在你想知道是否有办法避免列出所有保险名称/它不是一个常数列表。答案是否定的,差不多。您可以以编程方式创建视图,但在添加保险时仍需要更新视图。