Вот мой сценарий:
У меня есть таблица Person со следующими полями.
create table Person(PersonID int primary key identity(1,1),
Age int,
height decimal(4,2),
weight decimal(6,2)
);
insert into Person(Age,height,weight) values (60,6.2,169); -- 1
insert into Person(Age,height,weight) values (15,5.1,100); -- 2
insert into Person(Age,height,weight) values (10,4.5,50); -- 3
Что мне нужно сделать, это
if the person Age >= 18 and height >= 6 then calculationValue = 20
if the person Age >= 18 and height < 6 then calculationValue = 15
if the person Age < 18 and weight >= 60 then calculationValue = 10
if the person Age < 18 and weight < 60 then calculationValue = 5
на основеЭтим условием мне нужно найти значение для вычисления и выполнить некоторые математические вычисления.
Я попытался создать гибкую модель, чтобы в будущем было проще добавить дополнительные условия и легко изменить постоянные значения (например, 18, 6)., 60 и т. Д.)
Я создал пару таблиц, как показано ниже:
create table condTable(condTableID int primary key identity(1,1),
condCol varchar(20),
startValue int,
endValue int
);
insert into condTable(condCol,startValue,endValue) values ('Age',18,999) -- 1
insert into condTable(condCol,startValue,endValue) values ('Height',6,99) -- 2
insert into condTable(condCol,startValue,endValue) values ('Height',0,5.99) -- 3
insert into condTable(condCol,startValue,endValue) values ('Age',0,17) -- 4
insert into condTable(condCol,startValue,endValue) values ('Weight',60,999) -- 5
insert into condTable(condCol,startValue,endValue) values ('Weight',0,59) -- 6
Я соединяю два условия, чтобы сделать его одним в следующей таблице, как указано в требовании (т.е. если возраст> = 18 и высота> = 6, тогда значение расчета = 20. и т. Д.)
create table CondJoin(CondJoin int,condTableID int,CalculationValue int)
insert into CondJoin values (1,1,20)
insert into CondJoin values (1,2,20)
insert into CondJoin values (2,1,15)
insert into CondJoin values (2,3,15)
insert into CondJoin values (3,4,10)
insert into CondJoin values (3,5,10)
insert into CondJoin values (4,4,5)
insert into CondJoin values (4,6,5)
Я думаю, что эта модель обеспечит гибкость добавления большего количества условий в будущем.Но у меня возникают трудности при реализации этого в SQL Server 2005. Любой может написать sql, который обрабатывает в заданной основе, сравнить значение в таблице Person с таблицей CondJoin и предоставить соответствующее значение вычисления.Например,для человека с идентификатором 1 следует взглянуть на таблицу CondJoin и указать значение для вычисления 20, так как его возраст превышает 18 лет, а рост превышает 6.