如何删除重复的结果并获得正确的计数而不是1

时间:2019-07-08 13:33:30

标签: sql sql-server

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

我得到重复的结果,总数未到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

我希望这些类别能够匹配,例如“狗-哺乳动物”,“鸟-禽”和“兔子-啮齿动物”,以及每个类别的准确计数。

我要养狗

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

1 个答案:

答案 0 :(得分:0)

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

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