【问题标题】:Sql: select count and also many other fields in one querySql:在一个查询中选择计数以及许多其他字段
【发布时间】:2013-09-21 23:19:08
【问题描述】:

我正在使用 Sql Server 2008 r2。

我有以下表格:Family、FamilyChild、Scale、Allowance。

我需要检索每个家庭的孩子数,以便在 Scale 表中选择适当的值,然后将该值与 Allowance 表中的许多其他字段(来自这些或其他表)一起插入。

我需要为家庭表中的每个家庭行执行此操作。

我怎样才能尽可能简单地做到这一点?

谢谢。

【问题讨论】:

  • 最有可能使用存储过程...到目前为止您尝试了什么?
  • 我尝试选择家庭 id,按家庭 id 分组的计数,然后使用联合选择,但这不是方法,因为我想使用计数来选择适当的值每个家庭的比例表与其他字段让我们说家庭地址和孩子的出生。也许我可以通过加入选择来做到这一点,但我不知道怎么做。

标签: sql-server-2008 select insert count


【解决方案1】:

假设FamilyChild 上的每一行代表一个孩子:

SELECT  F.FamilyID,
        COUNT(*) NumberOfChildren
FROM Family F
LEFT JOIN FamilyChild FC
    ON F.FamilyID = FC.FamilyID
GROUP BY F.FamilyID

【讨论】:

  • 谢谢,我需要根据此计数以及许多其他字段(例如家庭档案号和孩子出生)在比例表中选择计数以及适当的值。我该怎么做是用 Union 还是其他方式?
  • @BIY 我怎么知道?,您还没有提供有关表定义的任何详细信息。在这些要求上也不是你的问题。如果这是您想要的,那么明确告诉我们您需要的确切结果是什么,以及表中的列是什么
  • 在 Scale 表中有金额字段:1 个孩子的金额,2 个孩子的金额,3 个孩子的金额......我需要在家庭表中选择正确的金额以及家庭地址和ChildFamily 表中的孩子出生。
  • @BIY 看,正确解释您需要的列并不难。例如,您命名为Child Birth,这是一个日期吗?如果是,如果有多个孩子,您将如何检索?,您想要每个孩子一列?,因为您还希望将孩子的总数作为一列
  • @BIY 因此,您希望结果集中每个孩子有一列。这就是为什么我要求您(不止一次)发布您想要的结果,这样我们就不必猜测您想要什么。您的问题任何地方都没有此要求,而且它肯定使这个问题与您发布的问题不同
【解决方案2】:

如果没有表格的字段(以及加入表格所需的字段,您将不会有一个非常合适的答案。我只能说:使用 count() 和 group by 运算符:

select f.family_name, count(c.children_id) 
from family f inner join familyChild c on f.family_id = c.family_id

然后您可以将它与比例表连接起来,或者在 EXISTS 子查询中使用它来过滤比例表并进行插入。

【讨论】:

  • 谢谢,我需要根据此计数以及许多其他字段(例如家庭档案号和孩子出生)在比例表中选择计数以及适当的值。我该怎么做那个?
【解决方案3】:

在使用 count,max 等聚合函数时,您应该在 select 语句中使用 group by 子句,并且不参与聚合函数的列应该是 group by 子句....例如

select f.family_name, count(c.children_id) 
from family f inner join familyChild c on f.family_id = c.family_id
group by f.family_name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多