首页 > 解决方案 > 如何使用 SQL Server 数据库中的另一个表编写子查询以连接姓氏和名字?

问题描述

我正在使用 2 个表,Orders并且Employees. 两者都有员工的身份证。我需要获得每个单独员工完成的订单总数。

我希望我的结果是这样的:全名,总订单。

我能得到的是:员工 ID、总订单。

即使使用 CAST 或 CONVERT,Order.EmployeeID我也无法连接。Employees.EmployeeID

我可以对 concat 名称进行单独查询,并按员工 ID 显示订单,但我不知道如何进行子查询来给我每个员工的全名和他们的订单总额。

SELECT 
    [dbo].[Orders].EmployeeID AS Seller,
    COUNT(OrderID) AS Amount
FROM
    [dbo].[Orders]
JOIN 
    [dbo].[Employees] ON [dbo].[Employees].EmployeeID = [dbo].[Orders].EmployeeID
GROUP BY 
    [dbo].[Orders].EmployeeID;

我期待以下结果:

|Name        |TotalOrders|
+------------+-----------+
|Johnny Bravo| 120       |

然而,目前的结果是:

|ID|TotalOrders|
+--+-----------+
|1 |120        |

标签: sqlsql-servergroup-by

解决方案


简单地连接它们,例如这样

SELECT 
    o.EmployeeID AS Seller,
    CONCAT(e.FirstName + ' ', e.LastName) AS FullName, 
    COUNT(o.OrderID) AS Amount
FROM
    [dbo].[Orders] o
JOIN 
    [dbo].[Employees] e ON o.EmployeeID = e.EmployeeID
GROUP BY 
    o.EmployeeID, e.FirstName, e.LastName

你也可以这样做

(e.FirstName + ' ' + e.LastName) as FullName

但请注意这一点,当其中一列是时NULL,结果也将是NULL

然后你必须这样做

(isnull(e.FirstName, '') + ' ' + isnull(e.LastName, '')) as FullName

因此,该CONCAT函数更简单,它会NULL为您将值转换为空字符串。

另请参阅此文档

编辑
正如 Sean Lange 所指出的,最好这样做

Concat(e.FirstName + ' ', e.LastName) as FullName,

代替

Concat(e.FirstName, ' ', e.LastName) as FullName,

因为这样,当名字为空时,您将没有前导空格


推荐阅读