sql complex case用于计算字段的语句

时间:2012-08-10 06:20:24

标签: 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 = 0 then FCalculated2 = FieldD * FieldB

else FCalculated2 = FieldD * FieldE

end

FCalculated1 = FCalculated2 / FieldA


end

基本上我需要在另一个条件中嵌套一个条件,并使用计算字段作为另一个字段的源。有人可以帮助我吗?

谢谢!!!

2 个答案:

答案 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