如何编写子查询以使用SQL Server数据库中的另一个表来连接姓氏和名字?

时间:2019-04-24 14:19:30

标签: sql sql-server group-by

我正在使用2个表,OrdersEmployees。两者都有雇员的ID。我需要获得每个单独员工完成的订单总数。

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

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

即使使用CAST或CONVERT,我也无法将Order.EmployeeIDEmployees.EmployeeID连接起来。

我可以对查询名称进行单独的查询,并按员工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        |

2 个答案:

答案 0 :(得分:2)

简单地串联它们,例如这样

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值转换为空字符串。

另请参阅此Documentation

编辑
正如肖恩·兰格(Sean Lange)所述,最好这样做

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

代替

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

因为这种方式,当名字为null时,您将没有前导空格

答案 1 :(得分:0)

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