具有多组附属关系的SQL计算

时间:2018-03-13 21:21:10

标签: sql sql-view sql-function

我正在尝试使用能够计算和汇总各种计数的功能或视图,同时能够搜索多对多的联盟。

以下是一个示例数据集:

Invoice Table:
InvoiceID LocationID   StatusID
1         5            1
2         5            1
3         5            1
4         5            2
5         7            2
5         7            1
5         7            2

Group Table:
GroupID   GroupName
1         Group 1
2         Group 2

GroupToLocation Table:
GroupToLocationID GroupID  LocationID
1                 1        5
2                 2        5
3                 2        7

我已经达到了可以总结每个位置的各种状态并得到这个的地步:

 LocationID     Status1   Status2
 5              3         1
 7              1         2

位置5有3个发票,状态为1,1个发票状态为2,而位置7有1个状态1和2个状态2

有两个组,而位置5在两个组中,而位置7仅在第二个组中。我需要能够设置它,我可以附加一个这样的where语句:

select * from vw_GroupCounts
where GroupName = 'Group 2'

select Invoice, SUM(*) from vw_GroupCounts
where GroupName = 'Group 2'

这导致只获得位置7.每当我这样做时,由于我必须使用左连接或沿着这些线的东西,计数对于位置附属的每个组都是重复的。我知道我可以按照子查询的方式执行某些操作并将GroupName传入其中,但我正在使用的系统使用动态查询构建器,该构建器根据用户输入附加WHERE语句。

我不介意在函数中使用视图,函数或任何数量的函数,但我希望有一种方法可以实现我正在寻找的东西。

1 个答案:

答案 0 :(得分:0)

由于位置5和7在第2组中,如果在加入所有表后在where子句中搜索第2组,那么在这种情况下你将获得所有记录,这不是重复,只是数据的方式是。不同的连接不会改变这一点,只会改变数据。如果我误解了一些事情,请告诉我。

以下是如何与他们一起进行搜索。

enter image description here

这是您的第一个位置和状态计数示例。

enter image description here