SQL计数只显示一次结果

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

在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     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

您应该在表示层而不是数据库层中“实现”这一点。我不认为您可以在数据库查询中指定这一点。查询会产生固定数量的列和行,每个单元格都应该有一个值。正如拉马克所建议的,您最好在表示层中这样做。即使这是可能的,它也会增加大量不必要的复杂性。这与其说是困难,不如说是一个愚蠢的请求。