Подсчет строк во многих таблицах - PullRequest
2 голосов
/ 19 марта 2012

Пожалуйста, помогите мне в следующей ситуации:

В SQL Server 2008 у меня есть база данных с таблицами:

  • Установки (id, name)который уникален для данной системы
  • Продукты (Id, name), которые установлены в системе

И поскольку в системе имеется больше продуктов и столько жеПродукт может быть установлен на нескольких машинах, есть таблица InstallationXProduct с их идентификаторами.

Другая таблица 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 из установки 1 или 2.

1 Ответ

1 голос
/ 19 марта 2012

Если вам нужно сосчитать строки в 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
...