複数のテーブルが既に結合されている状態で、2 つの列に同じ値を持つ行の総数を表示する列を追加するにはどうすればよいですか。すべての結合と where ステートメントの後、次の列を持つテーブルになります。
製品 | ポリシー番号 | 行番号 | 裏書名
表にはさらに多くの列がありますが、参照する必要があるのはこれらの列です。Product から Policy Number への 1 対多の関係、Policy Number から Line Number への 1 対多の関係、Line Number から Endorsement への 1 対多の関係、または一致しない関係があります。
現在のクエリは次のようになります。
Select pd.ProductName AS Product
,p.PolicyNumber AS Policy
,l.LineNumber AS Line
,e.EndorsementName AS Endorsement
FROM Lines l
INNER JOIN Policies p On p.PolicyID = l.PolicyID
LEFT OUTER JOIN Endorsements e on e.EndorsementID = l.EndorsementID
INNER JOIN Product pd on pd.ProductID = p.ProductID
結果のテーブルは次のようになります
Product Policy Line Endorsement
CH 8001 1 A
CH 8001 2 A
CH 8001 3 A
CH 8001 3 B
CH 8002 1 D
CH 8002 2 D
CH 8002 3 A
PP 9001 1 NULL
PP 9001 2 NULL
PP 9002 1 A
PP 9002 2 A
PP 9002 2 B
私がしなければならないことは、各ポリシー ラインの承認の数を数えることです。上記の例では、製品 CH の場合、複数の裏書きがある唯一の項目はポリシー 8001 - 行 3 であることがわかります。製品 PP の場合、複数の裏書がある唯一の項目はポリシー 9002 - 行 2 です。
最初に必要なのは、すべての行のカウントを表示する新しい列です。この列には、その行の同じ Policy 値と Line 値を持つ発生の総数が示されます。テーブルは次のようになります。
Product Policy Line Endorsement Line Endorsement Count
CH 8001 1 A 1
CH 8001 2 A 1
CH 8001 3 A 2
CH 8001 3 B 2
CH 8002 1 D 1
CH 8002 2 D 1
CH 8002 3 A 1
PP 9001 1 A 1
PP 9001 2 A 1
PP 9002 1 A 1
PP 9002 2 A 2
PP 9002 2 B 2
このカウントを正常に達成した後、複数の承認を持つ行を持たないポリシーを持つ行のみを返す別のクエリが必要になるため、この場合、ポリシー 8001 と 9002 は表示されません。
私は、さまざまな投稿で見たあらゆる種類のさまざまなことを試してみましたが、私のニーズに適応しましたが、この特定の例で機能する解決策は見つかりませんでしGROUP BY
た。HAVING
私はすでにかなりの数のWHERE
ステートメントといくつかの Order By も持っていることを覚えておいてください。
編集: Microsoft SQL Server Management Studio 2010 を使用してこれらのクエリを実行しています
ありがとう!