gpt4 book ai didi

sql - 如果值为空则合并行

转载 作者:行者123 更新时间:2023-12-02 13:38:21 24 4
gpt4 key购买 nike

我正在使用SQL-Server 2008。我需要合并具有相同 Name 的行,并在以下情况下增加计数器:

  1. 同一个 Name 的 1 个或多个 Id空白
  2. 如果 IdNULL,则不合并行!
  3. 如果 Name 相同但 Id 不同,则不合并行

现在的输出:

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 分组,但在本例中合并具有 NULL 值且具有相同名称但具有不同 Id's 的行对我来说有什么问题。

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

最佳答案

编辑

DECLARE @Data table (Name varchar(10), Id varchar(10)) -- Id must be varchar for blank value
INSERT @Data VALUES
('John', '1'),
('Peter', '2'),('Peter', '2'),
('Peter', '3'),--('Peter', ''), --For test
('Lisa', '4'),
('Lisa', NULL),
('David', '5'),
('David', ''),
('Ralph', ''), ('Ralph', '')
<小时/>
SELECT 
Name,
Id,
COUNT(*) + ISNULL(
(SELECT COUNT(*) FROM @data WHERE Name = d.Name AND Id = '' AND d.Id <> '')
, 0) AS Cnt
FROM @data d
WHERE
Id IS NULL
OR Id <> ''
OR NOT EXISTS(SELECT * FROM @data WHERE Name = d.Name AND Id <> '')
GROUP BY Name, Id

关于sql - 如果值为空则合并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31533615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com