2017-01-17 11 views
-1

SQL問合せを実行して、ある表の行とその表の参照数を別の表から取得したいとします。ただし、参照の数は2番目の表のフィールドで分割する必要があります。ここで発生数をグループ単位で集計するSQL文

は私の簡素化DB-スキーマが

TableA    TableB 
------    ------ 
ID     FK_A 
        GroupId 

である私は、テーブルAを照会し、テーブルBの参照要素をカウントしたいのですが、は、そのグループIDのそれらをグループ化します。私は私のTableAの参照テーブルBで出現箇所のすべてを数える必要があります

SELECT ID, ??? FROM TableA 

ID Group1 Group2 Group3 
1 1  0  7 
2 3  3  9 

:結果は、この(Group1Group2Group3がTableB.GroupId内部値です)のように見えることがあります。

ここでは、サブクエリの作成方法や必要なことはわかりません。

更新 私はよく分からない、どのGroupIdsをTableBに入れることができるかわかりません。したがって、複数のcount文は機能しません。

+0

は、グループの数が固定されている場合は? –

+0

いいえ、ここで大きな問題です – Karl

答えて

0

使用Conditional Aggregate

select FK_A, 
     Count(case when GroupId = 1 then 1 end) as Group1, 
     Count(case when GroupId = 2 then 1 end) as Group2, 
     Count(case when GroupId = 3 then 1 end) as Group3 
From TableB 
Group by FK_A 

グループの数はその後、不明である

DECLARE @col VARCHAR(8000)= (SELECT ',' + Quotename(GroupId) 
    FROM TableB 
    GROUP BY GroupId 
    FOR xml path ('')) 

SET @col = Stuff(@col, 1, 1, '') 

DECLARE @sql VARCHAR(8000)='select * from TableB pivot (count(GroupId) for GroupId in (' 
+ @col + ')) pv' 

EXEC(@sql) 
+0

TableBにどのグループIDがあるのか​​わかりません。彼らは整数である必要はありません... – Karl

+0

@Karl - 2番目のアプローチはあなたのために働くはずです –

関連する問題