0

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

我有三个表,其中极其简化的版本是:

从业者:

  • practitioner_id :: int
  • name :: nvarchar

保险:

  • insurance_id :: int
  • name :: nvarchar

保险链接:

  • practitioner_id :: int
  • insurance_id :: int

所以,从业者表包含从业者列表,保险表包含保险列表,链接表表示哪个从业者支持哪个保险。

现在,我需要创建一个可以显示如下信息的视图:

视图表:

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

换句话说,视图中的列是从业者的 ID 和姓名,以及存在于Insurances中的每份保险(以保险名称作为列名(强制条件是保险名称是唯一的))。保险栏中的单元格将指示该从业者是否支持该保险。

有没有办法做到这一点?

或者更好的是,是否可以在 VB.NET 表单中的 DataSet 上使用 excel 样式的数据透视表?这也将解决我的许多问题。

4

1 回答 1

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]))

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

于 2011-08-23T15:50:45.443 回答