Превратите две таблицы и таблицу ссылок в одну большую таблицу

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

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

Практикующие:

  • 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

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам