sql - 如何使用 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 |
解决方案
简单地连接它们,例如这样
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,
因为这样,当名字为空时,您将没有前导空格
推荐阅读
- ios - 如何查看 Apple Watch 静音状态?
- javascript - Laravel 表单选择 onChange 值通过 AJAX 保存到数据库
- nginx - Nginx:无法从网络访问私人文件夹
- sqlite - Sqlite 删除速度慢 4GB
- python-3.x - 想要分隔不以逗号分隔的字典列表
- python - 使用 EJBCA SOAP API 注册服务器生成的 p12 证书
- xamarin.forms - 如何创建下拉菜单
- python - Pip 安装 SSL 问题
- git - 如何列出作为特定提交的一部分更改的文件?
- wordpress - 将 Facebook 帖子嵌入到 wordpress 网站不起作用