Sql server 2008 计算字段的sql复杂case when语句
我需要这个复杂sql语句的帮助。在select查询中,我需要向具有以下结构的计算字段添加语句:Sql server 2008 计算字段的sql复杂case when语句,sql-server-2008,calculated-columns,case-when,Sql Server 2008,Calculated Columns,Case When,我需要这个复杂sql语句的帮助。在select查询中,我需要向具有以下结构的计算字段添加语句: If Field1 = 'value1' then If Field2 = 0 then FCalculated1 = FieldA * FieldB else FCalculated1 = FieldA * FieldC end FCalculated2 = FCalculated1 * FieldA else if Field1 = 'value2' then If Field2
If Field1 = 'value1' then
If Field2 = 0 then FCalculated1 = FieldA * FieldB
else FCalculated1 = FieldA * FieldC
end
FCalculated2 = FCalculated1 * FieldA
else if Field1 = 'value2' then
If Field2 = 0 then FCalculated2 = FieldD * FieldB
else FCalculated2 = FieldD * FieldE
end
FCalculated1 = FCalculated2 / FieldA
end
基本上,我需要将一个条件嵌套在另一个条件中,并使用一个计算字段作为另一个字段的源。有人能帮我吗
谢谢你 试试这个
declare @Field1 int
declare @Field2 int
declare @FCalculated1 int
declare @FCalculated2 int
declare @FieldA int
declare @FieldB int
declare @FieldC int
declare @FieldD int
declare @FieldE int
declare @Value1 int
declare @Value2 int
select @FCalculated2 = case
when @Field1 = @Value1 then case
when @Field2 = 0 then @FieldA * @FieldB
else @FieldA * @FieldC
end * @FieldA
when @Field1 = @Value2 then case
when @Field2 = 0 then @FieldD * @FieldB
else @FieldD * @FieldE
end
end
select @FCalculated2
我的意思是,我已经使用变量来编译和测试它,只需将列名的@符号换掉就可以了
declare @Field1 int
declare @Field2 int
declare @FCalculated1 int
declare @FCalculated2 int
declare @FieldA int
declare @FieldB int
declare @FieldC int
declare @FieldD int
declare @FieldE int
declare @Value1 int
declare @Value2 int
select @FCalculated2 = case
when @Field1 = @Value1 then case
when @Field2 = 0 then @FieldA * @FieldB
else @FieldA * @FieldC
end * @FieldA
when @Field1 = @Value2 then case
when @Field2 = 0 then @FieldD * @FieldB
else @FieldD * @FieldE
end
end
select @FCalculated2
我的意思是,我已经使用变量来编译和测试它,只需替换列名的@符号在
SELECT
子句中不能有一列,在同一SELECT
子句中使用不同计算的结果(本质上,因为在SQL中,所有列都可能并行计算)。通常,我建议使用subselect进行第一次计算,但这在这里似乎不合理,因此我只需重复计算:
select
CASE
WHEN Field1 = 'value1' THEN
CASE WHEN Field2 = 0 THEN FieldA * FieldB
ELSE FieldA * FieldC
END
WHEN Field1 = 'value2' THEN
CASE WHEN Field2 = 0 THEN FieldD * FieldB
ELSE FieldD * FieldE
END / FieldA
END as FCalculated1,
CASE
WHEN Field1 = 'value1' THEN
CASE WHEN Field2 = 0 THEN FieldA * FieldB
ELSE FieldA * FieldC
END * FieldA
WHEN Field1 = 'value2' THEN
CASE WHEN Field2 = 0 THEN FieldD * FieldB
ELSE FieldD * FieldE
END
END as FCalculated2
在
SELECT
子句中不能有一列在同一SELECT
子句中使用不同计算的结果(本质上,因为在SQL中,所有列都可能并行计算)。通常,我建议使用subselect进行第一次计算,但这在这里似乎不合理,因此我只需重复计算:
select
CASE
WHEN Field1 = 'value1' THEN
CASE WHEN Field2 = 0 THEN FieldA * FieldB
ELSE FieldA * FieldC
END
WHEN Field1 = 'value2' THEN
CASE WHEN Field2 = 0 THEN FieldD * FieldB
ELSE FieldD * FieldE
END / FieldA
END as FCalculated1,
CASE
WHEN Field1 = 'value1' THEN
CASE WHEN Field2 = 0 THEN FieldA * FieldB
ELSE FieldA * FieldC
END * FieldA
WHEN Field1 = 'value2' THEN
CASE WHEN Field2 = 0 THEN FieldD * FieldB
ELSE FieldD * FieldE
END
END as FCalculated2
如果
Field1
等于niethervalue1
或value2
,该怎么办?为什么这些截然不同的计算必须占用相同的列?因为根据Field1的字段值,我需要计算字段的不同结果,如果Field1
等于niethervalue1
或value2
?为什么这些大不相同的计算必须占用相同的列?因为根据Field1的字段值,我需要不同的计算结果fields@Rsg-这一事实的相关性是什么?我所做的只是简单地将if/else结构转换成SQL等价物。@Damien_不信者-你说得对,对不起!非常感谢你的回答。我在我的查询中测试它。:)@Rsg-这一事实的相关性是什么?我所做的只是简单地将if/else结构转换成SQL等价物。@Damien_不信者-你说得对,对不起!非常感谢你的回答。我在我的查询中测试它。:)