Sql server 2008 计算字段的sql复杂case when语句

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

我需要这个复杂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
基本上,我需要将一个条件嵌套在另一个条件中,并使用一个计算字段作为另一个字段的源。有人能帮我吗

谢谢你

试试这个

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
等于niether
value1
value2
,该怎么办?为什么这些截然不同的计算必须占用相同的列?因为根据Field1的字段值,我需要计算字段的不同结果,如果
Field1
等于niether
value1
value2
?为什么这些大不相同的计算必须占用相同的列?因为根据Field1的字段值,我需要不同的计算结果fields@Rsg-这一事实的相关性是什么?我所做的只是简单地将if/else结构转换成SQL等价物。@Damien_不信者-你说得对,对不起!非常感谢你的回答。我在我的查询中测试它。:)@Rsg-这一事实的相关性是什么?我所做的只是简单地将if/else结构转换成SQL等价物。@Damien_不信者-你说得对,对不起!非常感谢你的回答。我在我的查询中测试它。:)