我想运行一个sql查询来获取一个表的行和来自另一个表的对它的引用数。但是,引用的数量应该由第二个表中的字段拆分。
这是我简化的DB-Schema
TableA TableB
------ ------
ID FK_A
GroupId
我想查询TableA并计算TableB的引用元素,但由于它们的GroupId,分组。结果可能如下所示(Group1
,Group2
和Group3
是TableB.GroupId中的值:
SELECT ID, ??? FROM TableA
ID Group1 Group2 Group3
1 1 0 7
2 3 3 9
我应该计算TableB中引用我的TableA的所有事件。
我真的不知道如何制作子查询或此处需要的任何内容。
更新 我不知道,哪个GroupId可以在TableB中。因此,多个计数语句都无法正常工作。
答案 0 :(得分: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)