;with
Таблица1 as (-- Types (Типы компонентов) (Number(int),Name(String))
select * from (values (1,'DRY'), (2,'LIQUID')) tmp(Number,Name)),
Таблица2 as (-- Dry (Сухие компоненты) (Number(int),Name(String),Type(int) (во всех полях =1))
select * from (values (2,'dry2'), (4,'dry4')) tmp(Number,Name)),
Таблица3 as (-- Liquid(Жидкие компоненты) (Number(int),Name(String),Type(int) (во всех полях =2))
select * from (values (4,'liq4'), (8,'liq8')) tmp(Number,Name)),
-- и основная Таблица4
--Mixer(Емкость) (Number(int), Name(string),
--ComponentType(int) // номер типа из таблицы Types,
--ComponentNumber(int) // номер компонента из таблицы Dry или Liquid в зависимости от типа
Mixer as (
select * from (values
(1,'mix1', 2, 4),
(2,'mix2', 1, 4)
)tmp(Number, Name, ComponentType, ComponentNumber)
)
-- Вопрос в создании представления типа: Mixer.Name|Types.Name|Dry/Liquid.Name
-- то есть в зависимости от значения типа в таблице Mixer
-- нужно вывести Название компонента или из таблицы Dry или из Liquid
select
m.Number, m.Name, t1.Name TypeName,
case m.ComponentType when 1 then t2.Name else t3.Name end ComponentName
from Mixer m
join Таблица1 t1 on t1.Number=m.ComponentType
left join Таблица2 t2 on t2.Number=m.ComponentNumber
left join Таблица3 t3 on t3.Number=m.ComponentNumber
|