3

表1:

TicketNumber    | Rules
---------------------------
PR123       | rule_123
PR123       | rule_234
PR123       | rule_456
PR999       | rule_abc
PR999       | rule_xyz

表 2:

TicketNumber    | Rules
---------------------------
PR123       | rule_123
PR123       | rule_234
PR999       | rule_abc

注: 両方のテーブルの構造は同じです。列名は同じですが、カウントが異なります。

注: 両方のテーブルに同じ TicketNumber 値のセットがあります

ケース 1: テーブル 1 のチケットと各チケットのルール数が必要な場合、クエリは次のとおりです。

Select [TicketNo], COUNT([TicketNo]) AS Rules_Count from [Table1] group by TicketNo

これにより、次の形式で出力が得られます。

ticketNumber    | Rules_Count
---------------------------
PR123       | 3
PR999       | 9

ケース 2: (これについてはサポートが必要です)

ここで、前のクエリは、1 つのテーブルのみのチケットとチケットの数を取得します。table2 にも同じチケットの数が必要です (どちらも同じ tkt nos のセットを持っているため)。

私はこの方法で結果が必要です:

ticketNumber    | Count(ticketNumber) of table1 | Count(ticketNumber) of table2
---------------------------------------------------------------------------------
PR123       | 3                 | 2
PR999       | 2                 | 1

テーブル 1 とテーブル 2 のチケット番号のセットは同じですが、カウントが異なります。

上記のような結果を得るにはどうすればよいですか?

4

3 に答える 3

8

「ステートメントの観点」からのより単純なソリューション(COALESCEそれがなければ、理解するのはそれほど簡単ではないかもしれません)。

パフォーマンスに注意してください:

Select T1.TicketNumber,T1.Rules_Count_1,T2.Rules_Count_2
FROM
(
  Select [TicketNumber], COUNT([TicketNumber]) AS Rules_Count_1 
  from [Table1] T1
  group by TicketNumber) T1
INNER JOIN
(
  Select [TicketNumber], COUNT([TicketNumber]) AS Rules_Count_2
  from [Table2] T2
  group by TicketNumber
 ) T2
on T1.TicketNumber = T2.TicketNumber

SQL フィドルのデモ

于 2013-08-27T13:34:50.410 に答える