【问题标题】:Query Handling Sql Server查询处理 Sql Server
【发布时间】:2013-04-24 13:50:42
【问题描述】:

请帮助我查询。我的 DBMS 很弱。

我有一张表TBLParent,其中有如下几行

pkParentId   FKProductId     Name
  1              5             P1
  2              5             P2
  3              3             P3

我还有另一张桌子 TBLChild 由它的孩子组成

pkId     fkParentId    ChildName
 1            1          C1
 2            1          c2
 3            2          c1

现在,问题是我想要基于 productId 的父记录和其子项的计数。

例如:我想

select 
    TBLParent.pkParentId, TBLParent.FKProductId, 
    TBLParent.Name, 
    count of its children
where   
    TBLParent.FKProductId = 5   

我试过这样

Select 
    count(TBLChild.pkId) AS total, 
    TBLChild.fkParentId    
from  
    TBLChild 
group by 
    TBLChild.fkParentId  

但是我怎样才能用这个计数附加父表的记录呢?

这会给我计数,但我将如何将父记录与此计数联系起来。我的意思是说输出是

pkParentId   Name      Count
  1           P1         2
  2           P2         1

请帮忙,请帮忙,请帮忙?

【问题讨论】:

    标签: sql sql-server-2005 rdbms database


    【解决方案1】:
    SELECT P.pkParentId
          ,P.Name
          ,COUNT(*)
    FROM tblParent P
    INNER JOIN tblChild C ON P.pkParentId = C.fkParentId
    WHERE P.pkParentId = @yourValueHere
    GROUP BY P.pkParentId, P.Name
    

    【讨论】:

    • 但是先生,我想通过 fkParentId 而不是 pkParentId 获取记录,如上面的查询 SELECT P.pkParentId ,P.Name ,COUNT(*) FROM tblParent P INNER JOIN tblChild C ON P.pkParentId = C.fkParentId WHERE P.fkParentId = @yourValueHere GROUP BY P.pkParentId, P.Name
    • 在上述查询中,fkParentId 和 pkParentId 将相等。查询的“INNER JOIN”部分是为您做的。根据您在问题中的示例输出,此查询将为您提供所需的内容。
    • 好的先生根据您的说法,如果我输入@yourValueHere=5,它会返回我所需的结果。很抱歉再次打扰您。但我被你最后的回答弄糊涂了。
    • 是的,我相信你会看到你在寻找什么。如果不是,我误解了这个问题,我们可以继续努力。
    • 它正在按要求工作,先生。但是先生,如果我有父记录并且它也没有任何子记录,它是否有可能返回计数为 0 的父记录,因为在此查询中它通过内连接选择记录。我用左连接替换了内连接加入,它返回记录,但它不显示它的计数 0 谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多