请帮我解决以下问题:
在SQL Server 2008中,我有一个包含表的数据库:
id, name
)对于给定系统而言是唯一的Id, name
)已安装在系统上因为系统有更多的产品,并且可以在多台机器上安装相同的产品,所以有InstallationXProduct
表及其ID。
另一个表Usages
(usageid, productid, date
等)与产品相关联,以跟踪产品使用情况。
我需要一个脚本来链接每个Installation
对的Products
,Usage
和Installation-Product
次,例如
Installation 1 Product A 2
Installation 1 Product B 3
Installation 2 Product A 1
Installation 2 Product C 2
感谢您的帮助
后来编辑:
表:
Installation
:InstallationID, InstallationName
Product
:ProductID, ProductName
InstallationXProduct
:InstallationID, ProductID
Usage
:UsageID, 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上记录了使用情况。
答案 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