我需要这个复杂的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 = 0 then FCalculated2 = FieldD * FieldB
else FCalculated2 = FieldD * FieldE
end
FCalculated1 = FCalculated2 / FieldA
end
基本上我需要在另一个条件中嵌套一个条件,并使用计算字段作为另一个字段的源。有人可以帮助我吗?
谢谢!!!
答案 0 :(得分:2)
试试这个
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
我的意思是我已经使用变量进行编译和测试,只需将@符号替换为列名
答案 1 :(得分:2)
SELECT
子句中不能有一列使用同一SELECT
子句中不同计算的结果(实质上,因为在SQL中,所有列都可能并行计算)。通常,我建议使用子选择来进行第一次计算,但这在这里似乎不合理,所以我只是重复计算:
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