SQL计数只显示一次结果
在SQL Server Management Studio 2012中,我的简单查询如下:-SQL计数只显示一次结果,sql,sql-server,tsql,Sql,Sql Server,Tsql,在SQL Server Management Studio 2012中,我的简单查询如下:- SELECT Last_Name, City, (SELECT COUNT (City) FROM Customers IX WHERE IX.City = EX.City) as counting FROM Customers EX GROUP BY City, Last_Name ORDER BY City 输出如下:- Last_Name City Counting Joe L
SELECT Last_Name, City,
(SELECT COUNT (City) FROM Customers IX WHERE IX.City = EX.City) as counting
FROM Customers EX
GROUP BY City, Last_Name
ORDER BY City
输出如下:-
Last_Name City Counting
Joe London 3
Smith London 3
Carter London 3
Stones New York 3
Jones New York 3
White New York 3
但我希望它不要像这样重复同一城市和产出的计数:-
Last_Name City Counting
Joe London 3
Smith London
Carter London
Stones New York 3
Jones New York
White New York
我该如何实现这一点呢?似乎是一个非常奇怪的请求,在应用程序端很容易实现。但在SQL中并没有那么难:
SELECT Last_Name, City,
(case when row_number() over (partition by Last_Name, City order by (select NULL)) = 1
then (SELECT COUNT(City) FROM Customers IX WHERE IX.City = EX.City) as counting
end) as Counting
FROM Customers EX
GROUP BY City, Last_Name
ORDER BY City;
这会将每个城市的值放在一行上。这不是确定哪一个,但在实践中可能是第一个。您可以通过使用稳定排序来保证这一点:
SELECT Last_Name, City,
(case when row_number() over (partition by Last_Name, City order by Last_Name) = 1
then (SELECT COUNT(City) FROM Customers IX WHERE IX.City = EX.City) as counting
end) as Counting
FROM Customers EX
GROUP BY City, Last_Name
ORDER BY City, Last_Name
您应该在表示层而不是数据库层中“实现”这一点。我不认为您可以在数据库查询中指定这一点。查询会产生固定数量的列和行,每个单元格都应该有一个值。正如拉马克所建议的,您最好在表示层中这样做。即使这是可能的,它也会增加大量不必要的复杂性。这与其说是困难,不如说是一个愚蠢的请求。