我正在使用 SQL-Server 2008。我需要合并同一Name
的行,并在以下情况下增加计数器:
- 一个或多个相同
Name
的Id
为空 - 如果
Id
为NULL
,则不要合并行! - 如果具有相同的
Name
但不同的Ids
,则不要合并行
目前的输出:
Name Id Cnt
John 1 1
Peter 2 2 -- This Peter with the same Id have 2 entries so Cnt = 2
Peter 3 1 -- This is other Peter with 1 entry so Cnt = 1
Lisa 4 1
Lisa NULL 1
David 5 1
David 1 -- here Id is blank ''
Ralph 2 -- Ralph have both rows with blank Id so Cnt = 2
期望的输出:
Name Id Cnt
John 1 1
Peter 2 2
Peter 3 1
Lisa 4 1
Lisa NULL 1 -- null still here
David 5 2 -- merged with blank '' so Cnt = 2
Ralph 2 -- merged both blanks '' so Cnt = 2
SQL查询:
这是我现在使用的样本查询:
SELECT Name,
Id,
COUNT(Id) AS Cnt
FROM Employees
WHERE Condition = 1
GROUP BY Name, Id
我尝试了以下方法: 在SELECT子句中添加聚合函数MAX到Id,并仅按Name分组,但在这种情况下,合并了具有不同Id但名称相同且带有NULL值的行,这对我来说是错误的。
SELECT Name,
MAX(Id), -- added aggregate
COUNT(Id) AS Cnt
FROM Employees
WHERE Condition = 1
GROUP BY Name -- grouped by Name only
你有什么想法吗?如果问题不清楚,请问我,我会提供更多细节。
更新:
DDL
CREATE TABLE Employees
(
Name NVARCHAR(40),
Id NVARCHAR(40)
);
DML
INSERT INTO Employees VALUES
('John' , '1')
,('Peter', '2')
,('Peter', '2')
,('Peter', '3')
,('Lisa' , '4')
,('Lisa' , NULL)
,('David', '5')
,('David', '')
,('Ralph', '')
,('Ralph', '')
示例: SQL FIDDLE