Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL+;计数_Sql_Sql Server_Tsql - Fatal编程技术网

在SQL+;计数

在SQL+;计数,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个包含许多列和行的表,一列下有组,另一列下有人,每个组中可以有一个或多个人。我想做这样的事情(伪代码): 我来自python背景,SQL对我来说还是很新的,但我(非常有缺陷)的尝试: 表A看起来有点像这样: groups people A tom A jerry B sarah person

我有一个包含许多列和行的表,一列下有组,另一列下有人,每个组中可以有一个或多个人。我想做这样的事情(伪代码):

我来自python背景,SQL对我来说还是很新的,但我(非常有缺陷)的尝试:

表A看起来有点像这样:

groups                   people
A                        tom
A                        jerry
B                        sarah
person                   familyMembers
tom                        daughter
tom                        son
tom                        wife
sarah                      husband
表B如下所示:

groups                   people
A                        tom
A                        jerry
B                        sarah
person                   familyMembers
tom                        daughter
tom                        son
tom                        wife
sarah                      husband
汤姆有三个家庭成员,萨拉只有一个


有点迷失了,洞察?

现在还不清楚团队是如何参与进来的。听起来你想计算每个人的家庭成员人数,对吗?一个简单的方法是只计算表B中的家庭:

SELECT
  person,
  COUNT(familyMembers) AS count_familyMembers
FROM tableB
GROUP BY person
这会同时忽略“
”列,但如果表B中没有记录,则会忽略任何人(例如示例中的Jerry)

要包括Jerry,您需要执行以下操作。这将检查familyMembers是否为
NULL
并返回0,否则将返回1。然后将所有记录相加,得到总记录数,按组和人员列进行划分

SELECT
  groups,
  people,
  SUM(CASE
    WHEN familyMembers IS NULL THEN 0
    ELSE 1
  END) AS count_familyMembers
FROM tableA
LEFT JOIN tableB
  ON tableA.people = tableB.person
GROUP BY groups,
         people
如果上述操作有效,则可以在中添加“
”以创建新表:

SELECT
  groups,
  people,
  SUM(CASE
    WHEN familyMembers IS NULL THEN 0
    ELSE 1
  END) AS count_familyMembers INTO new_table
FROM tableA
LEFT JOIN tableB
  ON tableA.people = tableB.person
GROUP BY groups,
         people
或对现有表执行“
插入到”
”。如果执行“
插入到”
”,则需要匹配数据和列:

INSERT INTO existingTable (groups, people, familyCount)
  SELECT
    groups,
    people,
    SUM(CASE
      WHEN familyMembers IS NULL THEN 0
      ELSE 1
    END) AS count_familyMembers INTO new_table
  FROM tableA
  LEFT JOIN tableB
    ON tableA.people = tableB.person
  GROUP BY groups,
           people

您是在MySQL中还是在Microsoft SQL Server中寻求帮助?Microsoft SQL Server会将这两种情况插入到同一个表中,还是需要插入到不同的表中?@sammuh能否添加带有示例数据的表结构以提高清晰度?它们将插入到同一个表中。