我想听听是否有人可以告诉我一种简单的语法,该语法可以实现与以下相同的功能(具有相同的灵活性):

SELECT C.CompanyName,
(SELECT Count(*) FROM Employees WHERE CompanyId = C.Id) as EmployeeCount
FROM Company C

现在,重要的是给EmployeeCount的内部SELECT是:

  1. 独立的SELECT语句
    • 这意味着它应该与任何现有的SELECT一起使用,即使它已经包含联接等。
  2. 可以使用来自父SELECT的值

我知道可以通过其他方式轻松实现此方案,但以上只是简化示例来说明这一挑战。 我的实际情况是一个复杂的SELECT语句,在该语句中我不想通过添加更多联接来使其复杂化。 性能不是问题。

===============>>#1 票数:3 已采纳

使用INNER JOIN

SELECT C.CompanyName, Count(E.*) as EmployeeCount
FROM Company C
INNER JOIN Employees E on E.CompanyId = C.Id 

使用NESTED JOIN

SELECT C.CompanyName, Count(E.1) as EmployeeCount
FROM Company C, Employess E
WHERE E.CompanyId = C.Id

如果要使用相同的语法,请至少输入以下内容:

SELECT C.CompanyName,
(SELECT Count(1) FROM Employees WHERE CompanyId = C.Id) as EmployeeCount
FROM Company C

如果您需要显示所有数据,即使是没有雇员的公司数据,也可以使用LEFT OUTER JOIN

SELECT C.CompanyName, Count(E.*) as EmployeeCount
FROM Company C
LEFT OUTER JOIN Employees E on E.CompanyId = C.Id 

===============>>#2 票数:1

尝试使用派生表,该表可同时说明两个条件。

  1. 独立的SELECT语句。
    一种。 使用派生表可让您保留独立的Select语句

  2. 可以使用来自父SELECT的值。

    一种。 作为内部联接,您仍然可以使用父选择中的值。


SELECT 
  C.CompanyName, 
  EC.EmployeeCount
FROM Company C 
INNER JOIN (SELECT 
              Count(*) AS EmployeeCount 
            FROM Employees ) EC 
  ON WHERE EC.CompanyId = C.Id

===============>>#3 票数:1

如果您的内部选择很复杂,那么为什么不看一下它:

CREATE VIEW EmpSelect AS
    SELECT CompanyId, whatever FROM Employees;

然后

SELECT
    C.CompanyName, Count(*) AS EmpCount
FROM
    Company C
    LEFT JOIN EmpSelect E
        ON C.Id = E.CompanyId
GROUP BY
    C.CompanyName;

  ask by Niels Brinch translate from so

未解决问题?本站智能推荐:

1回复

选择QUERY内部联接字段以获取文本值而不是ID的值

我有一张看起来像这样的桌子... 这是桌子的样子。 如果用户编辑了一条记录,我将保存原始值和新值。 现在,这就是我想要做的。 我需要能够显示文本而不是ID(数字)。 除了(在此示例中)AmountPaid和Address之外,所有值都在tblDefinition中,如下所示:..
2回复

使用两列从表中选择不同的值

我在表中有以下数据。 我想要追踪查询结果 我想避免在名称栏中重复。 任何帮助是极大的赞赏。 由于ID具有不同的值,因此无法使用。
2回复

SQL:选择两列减法的最小值,并选择min减法中使用的数字

我有两列,我想选择:价格,最小值abs。 Price和Strike之间的差异,以及与最小abs相对应的Strike。 差异计算。 我是SQL新手,如果这很容易,请原谅我。 我想得到的答案是: 我到目前为止的代码是: 我不知道如何正确选择相应的警示。 非常感谢你
2回复

内部选择语句计数[关闭]

我试图在SQL服务器中执行以下查询,但我收到错误。 有人可以解释一下如何计算内部选择语句吗?
1回复

选择列和最大值

我会解释我的问题所以它变得更加清晰。 我必须选择医院用量最大的医院。 我的表看起来像这样: 我努力了 : 但那只返回6号(这是军医的id之一) 但这也失败了 聚合可能不会出现在WHERE子句中,除非它位于HAVING子句或选择列表中包含的子查询中,并
2回复

通过列值选择SQL [重复]

这个问题已经在这里有了答案: 在数据库中的任何地方查找值 15个答案 我正在使用一个非常混乱的数据库进行工作,该数据库具有很多表,并且某些表中的列数很大,而且命名不正确,因此无法找到任何特定的东西。 我需要一个选择操作,通过检查每个表的每一列中的值来查找具有等
7回复

SQL根据列值选择

我们有一个包含公司工作代码的数据库表,如下所示: 公司中的“ ***”表示企业级别的职务代码,可以在雇主级别(DEU,DEC)覆盖。 我需要一条选择语句,该语句返回具有以下条件的行: 如果没有公司特定代码(例如EW20),则返回企业级行(例如第4行) 如果有公司特
3回复

SQL首先选择某些值

非常简单的Select Statement,但它输出 我如何让美国和加拿大成为最重要的? 这可能是SQL还是我需要在我的ASP代码中做一些事情? 我的PK是INT身份。
3回复

选择具有最大值的记录

我有一个表,叫做: customers 。 我正在尝试获得薪水最高的人的名字和薪水。 所以我尝试了这个: 不幸的是,我得到了这个错误: 选择列表中的“ CUSTOMERS.name”列无效,因为它既不包含在聚合函数中也不在GROUP BY子句中。 我知道我应
1回复

如何选择不同的选项AS值

我正在尝试用sql填充存储表。 有两种存储项目,产品和列。 产品由col组成,并具有用于链接的表“ prodcols”。 我有: 所需结果: 我已经实现了一种列出具有所需数量的产品或列的方法,但是不知道如何使用单个子句列出它们。 最终结果包括一些带有变量的WHERE,