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

SELECT句内の 1 つの列で、同じ句内の別の計算の結果を使用することはできません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 に答える
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 に答える