Превратите две таблицы и таблицу ссылок в одну большую таблицу
Я пытался найти этот вопрос, но ничего не нашел. Так что здесь идет...
У меня есть три таблицы, чрезвычайно упрощенные версии которых:
Практикующие:
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]))
Я знаю, что теперь вы задаетесь вопросом, есть ли способ избежать перечисления всех названий страховых полисов / не быть постоянным списком. Ответ нет, в значительной степени. Вы можете создать вид программно, но вид все еще нуждается в обновлении при добавлении страховки.