首页 > 解决方案 > 如何删除重复的结果并获得正确的计数而不仅仅是 1

问题描述

我需要创建一个视图来显示每个动物类别、动物类型以及动物总数的准确计数。

我得到重复的结果,总数低于 1 并且类别显示不准确。

谁能建议如何解决这些问题

CREATE VIEW vw_PetsPerType
AS
    (
        SELECT   dbo.StockInfo.petQty, dbo.PetTypes.Category, dbo.Pets.Name
        FROM          dbo.StockInfo CROSS JOIN
                      dbo.PetTypes CROSS JOIN
                      dbo.Pets

    )

    (

        SELECT COUNT(Pets.Qty) as 'Total', (Pets.Name), PetTypes.Category
        FROM Pets, PetTypes
        GROUP BY PetTypes.Category, pets.Name

    )
GO

我希望这些类别能够匹配,例如 Dog-Mammal、Bird - Avian 和 Rabbit - Rodent 以及每个类别的准确计数。

我要养狗

Total   Animal  Category
1   Bird    Avians
1   Bird    Mammals
1   Bird    Rodent
1   Dog Avians
1   Dog Mammals
1   Dog Rodent
1   Rabbit  Avians
1   Rabbit  Mammals
1   Rabbit  Rodent

标签: sqlsql-server

解决方案


您正在使用 CROSS JOIN 它将一个表中的每一行与另一个表中的每一行连接起来。如果您使用 WHERE 子句,那么您应该消除重复项。

 WHERE pets.stockinfokey = StockInfo .stockinfokey AND
      pets.pettypekey = pettypes.pettypekey

推荐阅读