昨天产品提出新需求,要让产品名字与编码不一致的数据进行合并计算,起初采用GROUP BY做分组求和无法满足用户需求,我新增了一个主从产品别名表,但效果不佳,一直是这样的效果:
//别名数据
CS01 葡萄 CS04 巨峰葡萄
CS02 玫瑰葡萄 CS03 青提
//我的数据
CS01 葡萄 10
CS02 玫瑰葡萄 20
CS03 青提 30
CS04 巨峰葡萄 40
//左关联分组数据。
10
20
30
CS04 巨峰葡萄 40
//想要效果
CS01 葡萄 50
CS02 玫瑰葡萄 50
为了达到效果,我发现了sql server中的COALESCE函数。sql 语句试列如下:
```sql
CREATE TABLE Employees (
EmployeeID INT,
Nickname VARCHAR(50),
Fullname VARCHAR(50)
);
-- 插入示例数据
INSERT INTO Employees (EmployeeID, Nickname, Fullname) VALUES
(1, 'John', 'John Doe'),
(2, NULL, 'Jane Smith'),
(3, 'Mike', 'Mike Johnson'),
(4, NULL, 'Emily Brown');
SELECT
EmployeeID,
COALESCE(Nickname, Fullname) AS DisplayName -- 优先显示 Nickname,如果 Nickname 为 NULL 则显示 Fullname
FROM Employees;
COALESCE 函数用于返回其参数中的第一个 非空 值。简单的说,它会从左到右依次检查每个参数,遇到第一个不为 NULL 的值时,就会返回该值。如果所有参数都是 NULL,则返回 NULL。
COALESCE 函数的解释:
对于 EmployeeID = 1,Nickname 为 John,因此返回 John。
对于 EmployeeID = 2,Nickname 为 NULL,因此返回 Fullname,即 Jane Smith。
对于 EmployeeID = 3,Nickname 为 Mike,因此返回 Mike。
对于 EmployeeID = 4,Nickname 为 NULL,因此返回 Fullname,即 Emily Brown。