1

そのため、クエリに結合しようとしています。そのためには、このクエリで何が起こっているのかを把握する必要があります。私はまだSQLサーバーに比較的慣れていないため、複雑なqryに飛び込むことを余儀なくされ、このような単純なことに行き詰まることがあります。私の問題は、 Sum(1) 関数が使用されていることであり、その方法が完全にはわかりません。つまり、重複をカウントしていると思いますが、どのような情報に基づいてそうしているのかわかりません。

これがクエリです

SELECT 
qryReinsuranceDPA1.POLICY_NO, 
qryReinsuranceDPA1.PHASE_CODE, 
qryReinsuranceDPA1.SUB_PHASE_CODE, 
qryReinsuranceDPA1.ProdType, 
TotalDPA = Sum(case when [SumOfNetDefExtraAdj] Is Null then [SumOfNetDefPremiumAdj] else [SumOfNetDefPremiumAdj] + SumOfNetDefExtraAdj end), 
Sum(1) AS Expr1
FROM qryPolicyListforNYDefPRemAsset_Re RIGHT JOIN qryReinsuranceDPA1
ON 
qryReinsuranceDPA1.POLICY_NO = qryPolicyListforNYDefPRemAsset_Re.POLICY_NO AND 
qryReinsuranceDPA1.PHASE_CODE= qryPolicyListforNYDefPRemAsset_Re.PHASE_CODE AND 
qryReinsuranceDPA1.SUB_PHASE_CODE = qryPolicyListforNYDefPRemAsset_Re.SUB_PHASE_CODE 
GROUP BY qryReinsuranceDPA1.POLICY_NO, 
qryReinsuranceDPA1.PHASE_CODE, 
qryReinsuranceDPA1.SUB_PHASE_CODE, 
qryReinsuranceDPA1.ProdType
--HAVING (((Sum(1))<>1))

GO

そして、これはそれが生成するものの小さなサンプルです (実際の結果は約 77,000 です)

POLICY_NO    PHASE_CODE    SUB_PHASE_CODE    ProdType   TotalDPA       Expr1
228433800    0             1                 TERM       282.324223     1
228439200    0             1                 PERM       53.17048634    1
228439200    6             1                 PERM       10.3805065     1
228441500    0             1                 PERM       526.6883742    1
228441500    0             2                 PERM       10.63320899    1
228441700    0             1                 PERM       20.86247317    1
228448100    0             1                 PERM       345.2117169    1
228460200    0             1                 TERM       302.7574933    1
228464900    0             1                 TERM       191.2597906    1
228468000    0             1                 PERM       8445.190912    1
228473600    0             1                 TERM       339.8413682    **2**
228473800    0             1                 TERM       686.1766864    **2**
228477200    0             1                 TERM       583.7580207    1
228481200    0             1                 TERM       362.9472595    1
228481200    0             2                 PERM       4.217792443    1
228482500    0             1                 PERM       1894.303507    1
228482500    1             1                 TERM       1312.183889    1
228491600    0             1                 TERM       325.0796843    **2**
228494400    0             1                 PERM       748.2710255    1
228501000    0             1                 TERM       47.78070676    1
228501100    0             1                 TERM       47.78070676    1
228501300    0             1                 PERM       365.5651862    1
228501300    0             2                 PERM       12.20547324    1
228501300    1             1                 TERM       706.0961491    1
228501300    1             2                 PERM       12.46769547    1
228502000    0             1                 PERM       6562.164879    1
228502000    0             2                 PERM       184.7741277    1

一番右の列は Sum(1) の結果であり、私が知りたいのは、いつ、なぜ 2 が生成されるかです。

4

1 に答える 1

5

sum(1)とまったく同じですcount(*)- グループ内のすべての行の数を返します。

したがって、POLICY_NO、PHASE_CODE、SUB_PHASE_CODE、および ProdType のそれぞれに指定された値に対して、選択したデータセット (グループ化前) に 2 つの行がある場合、値 2 が返されます。

于 2013-05-29T16:16:08.193 に答える