计算多个表中的行数

时间:2012-03-19 10:23:01

标签: sql-server count aggregate

请帮我解决以下问题:

在SQL Server 2008中,我有一个包含表的数据库:

  • 安装id, name)对于给定系统而言是唯一的
  • 产品Id, name)已安装在系统上

因为系统有更多的产品,并且可以在多台机器上安装相同的产品,所以有InstallationXProduct表及其ID。

另一个表Usagesusageid, productid, date等)与产品相关联,以跟踪产品使用情况。

我需要一个脚本来链接每个Installation对的ProductsUsageInstallation-Product次,例如

Installation 1 Product A    2
Installation 1 Product B    3
Installation 2 Product A    1
Installation 2 Product C    2

感谢您的帮助

后来编辑:

表:

  • InstallationInstallationID, InstallationName
  • ProductProductID, ProductName
  • InstallationXProductInstallationID, ProductID
  • UsageUsageID, DateRecorded, ProductID

设置数据:

Insert into Installation values(1,'A')
Insert into Installation values(2,'B')

Insert into Product values (1,'P1')
Insert into Product values (2,'P2')

Insert into InstallationXProduct values (1,1)
Insert into InstallationXProduct values (2,1)
Insert into InstallationXProduct values (1,2)
Insert into InstallationXProduct values (2,2)
Insert into Usage values(1,getdate(),1)
Insert into Usage values(2,getdate(),2)
Insert into Usage values(3,getdate(),1)

查询选择:

select I.InstallationID, P.ProductID, count(U.UsageID)
from Installation I 
join InstallationXProduct IXC on I.InstallationID = IXC.InstallationID
join Product P on P.ProductID = IXC.ProductID
join Usage U on U.ProductID = P.ProductID
group by I.InstallationId,P.ProductID

返回:

1   1   2
2   1   2
1   2   1
2   2   1

在阅读了这个简易版本之后,我想我明白为什么不可能将产品和装置中的用法分开,我无法确定是否在安装1或2中的产品1上记录了使用情况。

1 个答案:

答案 0 :(得分:1)

如果您需要计算Usages中的行数,那么这样的内容可能会有所帮助:

SELECT
    InstallationName = i.Name,
    ProductName = p.Name,
    UsageCount = COUNT(u.*)
FROM
    dbo.Installations i 
INNER JOIN
    dbo.InstallationXProduct ixp ON i.InstallationId = i.Id
INNER JOIN
    dbo.Product p ON ixp.ProductId = p.Id
INNER JOIN
    dbo.Usages u ON u.ProductId = p.Id
GROUP BY
    i.Name, p.Name