我正在使用SQL-Server 2008。我需要行與同Name
和增加計數器相結合時:如果值爲空,則合併行
- 1個或多個
Id's
爲同一Name
是blank
- 如果
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
,但在這種情況下合併的行與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
你有什麼想法嗎?如果有什麼不清楚的問題 - 問我,我會提供更多的細節。
UPDATE:
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', '')
DEMO:SQL FIDDLE
對於格式良好的問題+1。但是,最好將示例數據的相關表格ddl + dml包含在內,以便任何想要回答的人都能夠輕鬆地重現該表格。 –
表格中數據的奇怪設計...您會考慮更改數據嗎? – Anton
@Zohar第二,我會提供DDL + DML –