1

次の表を想定します。

ID     COMPANY     SUBSIDIARY     NR_LIVES     INSURANCE_LINE     FACTOR_CALC
1      COMPANY_X   SUB_1          860          LIFE               YES
2      COMPANY_X   SUB_1          860          DISABILITY         YES
3      COMPANY_X   SUB_1          860          MEDICAL            YES 
4      COMPANY_X   SUB_2          46           LIFE               YES
5      COMPANY_X   SUB_2          689          MEDICAL            YES
6      COMPANY_X   SUB_3          852          LIFE               YES 

値 2401 を返す SQL 文字列が必要です。これは、FACTOR_CALC = Yes である子会社ごとに最大の NR_Of_Lives の合計を作成することによって行われます。おそらく、レコードセットにすべてをロードしてから VBA を使用する方法を知っているでしょうが、1 つの SQL コマンドでそれが可能であればありがたいです。

更新: 現在のクエリ:

sSQL_Select = "SELECT SUM(NR_LIVES) FROM (SELECT SUBSIDIARY, MAX(NR_LIVES) FROM T_WILMA WHERE PARENT=" & lParent & " AND ACC_YEAR=" & lAcc_Year & _
                " AND FACTOR_CALCULATION=TRUE GROUP BY SUBSIDIARY);"

エラーをスローします: パラメーターが少なすぎます。1 が必要です。サブクエリ自体は期待どおりに機能します。これまでの返信に感謝しますが、これまでのところ機能させることに成功していません。

4

4 に答える 4

1

サブクエリで子会社ごとの最大値を決定できます。次に、外部クエリで最大値を合計できます。

select  sum(MaxLives)
from    (
        select  company
        ,       subsidiary
        ,       max(nr_lives) as MaxLives
        from    YourTable
        where   factor_calc = 'yes'
        group by
                company
        ,       subsidiary
        ) as SubQueryAlias
于 2012-08-31T09:33:55.187 に答える
0
SELECT SUM(NR_LIVES) 
from(
SELECT SUBSIDIARY,MAX(NR_LIVES) as NR_LIVES
from <Table>
where  FACTOR_CALC='YES'
group by SUBSIDIARY)a
于 2012-08-31T09:34:13.933 に答える
0

加算しようとしているNR_LIVESをシステムに通知する必要があります。あなたのテーブルで(そしてWHEREあなたの例にない余分なものを取り除くと、これは2401を返します

SELECT Sum(MAXNR_LIVES) AS Expr1
FROM (SELECT SUBSIDIARY, MAX(NR_LIVES) AS MAXNR_LIVES FROM T_WILMA 
WHERE FACTOR_CALC=TRUE GROUP BY SUBSIDIARY);
于 2012-09-01T22:40:21.290 に答える
0

I'll suggest you include some aliasing to see whether that helps unconfuse the db engine.

sSQL_Select = "SELECT SUM(sub.MaxOfNR_LIVES) AS NR_LIVES" & vbcrlf & _
    "FROM (" & vbCrLf & _
    "SELECT SUBSIDIARY, MAX(NR_LIVES) AS MaxOfNR_LIVES" & vbCrLf & _
    "FROM T_WILMA WHERE PARENT=" & lParent & _
    " AND ACC_YEAR=" & lAcc_Year & _
    " AND FACTOR_CALCULATION=TRUE GROUP BY SUBSIDIARY) AS sub;"
Debug.Print sSQL_Select
于 2012-08-31T15:21:13.367 に答える