0

この質問を探してみましたが、関連するものは何も見つかりませんでした。だからここに行きます...

私は3つのテーブルを持っています。それらの非常に単純化されたバージョンは次のとおりです。

開業医:

  • 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 と名前、および保険に存在するすべての保険です(列名として保険名を使用します (保険名が一意であるという強制条件があります))。保険の列のセルは、その開業医がその保険をサポートしているかどうかを示します。

これを行う方法はありますか?

それとも、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 に答える