Предполагая, что вам нужно такое поведение, потому что вы хотите сгруппировать по значениям столбца, который может иметь значение NULL (Id
в вашем примере), вы можете добавить row_number, когда столбец id
равен NULL, используя общее табличное выражение для создания искусственное различие между дублирующимися группами - вот так:
-- Adding some more rows to the table
INSERT INTO #TestTable(ID, Value) VALUES
(NULL, 70),
(NULL, 70),
(1, 70),
(1, 70),
(2, 70);
Запрос с cte:
WITH CTE AS
(
SELECT Id, Value, IIF(Id IS NULL, ROW_NUMBER() OVER(ORDER BY Id), NULL) As Surrogate
FROM #TestTable
)
SELECT
ID
, Value
FROM CTE
GROUP BY ID, Surrogate, Value
Результаты:
ID Value
NULL 70
NULL 70
1 70
2 70