Превратите две таблицы и таблицу ссылок в одну большую таблицу - PullRequest
0 голосов
/ 23 августа 2011

Я пытался найти этот вопрос, но ничего не нашел.Итак, вот ...

У меня есть три таблицы, чрезвычайно упрощенные версии которых:

Практики:

  • 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

Другими словами, столбцы в представлении - это идентификатор и имя практикующего, а также каждая страховка, существующая в Страховки (с названием страховки в качестве имени столбца (thЭто обязательное условие, что страховые имена являются уникальными)).В ячейках столбцов страховки будет указано, поддерживает ли этот практик эту страховку.

Есть ли способ сделать это?

Или, что еще лучше, можно ли использовать сводную таблицу в стиле Excelна DataSet в форме VB.NET?Это также решило бы многие мои проблемы.

1 Ответ

2 голосов
/ 23 августа 2011

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

Я знаю, что теперь вы задаетесь вопросом, есть ли способ избежать перечисления всех названий страховых полисов / отсутствия постоянного списка,Ответ - нет, в значительной степени.Вы можете создать вид программно, но вид все еще нуждается в обновлении при добавлении страховки.

...