1

我需要这个复杂的 sql 语句的帮助。在选择查询中,我需要向具有此结构的计算字段添加一条语句:

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

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

谢谢!!!

4

2 回答 2

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

我的意思是我已经使用变量来编译和测试它,只需将 @ 符号换成你的列名

于 2012-08-10T06:36:34.150 回答
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
于 2012-08-10T06:38:01.997 回答