1

私はそのような記録を持っています:

    Id  ForeignKey  Level   ValueA  ValueB
    1   1001        1       2       10
    2   1001        1       10      10
    3   1001        1       20      20
    4   1001        2       20      30
    5   1002        1       1       100
    6   1003        1       1       100
    7   1004        1       1       100

グループのレコードの ValueA 値の合計を ValueB 値の合計で割った値が 0.5 より大きい、ForeignKey と Level でグループ化されたグループの各レコードの Id を取得したい

この場合、最初の 3 つのレコードの Id を (2 + 10 + 20) / (10 + 10 + 20) = 0.8 として取得したいと思います。

これが私がこれまでに得たものです:

    select 
    ForeignKey,
    SUM(ValueA) as ValueASum,
    SUM(ValueB) as ValueBSum,
    from tableA 
    group by ForeignKey
    having (SUM(ValueA) / SUM(ValueB) > 0.5)

結果は

    ForeignKey  ValueASum   ValueBSum
    1001        32          40

この時点からレコードの ID を取得するにはどうすればよいですか? 選択に Id を追加する場合、それをグループ化し、各レコードのグループを作成する必要があります。

御時間ありがとうございます

4

2 に答える 2

1

あなたは正しい軌道に乗っていましたが、各「レベル」からそれが必要な場合は、それをグループに追加する必要もあります.

select
      tA2.ID,
      tA2.ForeignKey,
      tA2.Level,
      tA2.ValueA,
      tA2.ValueB
   from
      ( select 
              tA.ForeignKey,
              tA.Level,
              SUM(tA.ValueA) as ValueASum,
              SUM(tA.ValueB) as ValueBSum,
           from 
              tableA tA
           group by 
              tA.ForeignKey,
              tA.Level
           having 
              (SUM(tA.ValueA) / SUM(tA.ValueB) > 0.5) ) PreQualified
      JOIN tableA tA2
         on PreQualified.ForeignKey = tA2.ForeignKey
        AND PreQualified.Level = tA2.Level

これにより、修飾条件に一致するすべての値が得られます。

于 2013-05-28T10:51:58.437 に答える