2014-03-27 69 views
0

我简单的查询是在SQL Server Management如下2012工作室: -SQL COUNT只显示结果一次

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  

我会如何实现这一目标?

+5

你应该“实现”这一在表示层,而不是在数据库层 – Lamak

+0

我必须知道。为什么? – Zane

+1

我不认为这是你可以在数据库查询中指定的东西。查询会生成固定数量的列和行,并且每个单元格都应该有一个值。正如拉马克建议的那样,你最好在表示层做这件事。 即使这是可能的,它也会增加大量不必要的复杂性。 – skreborn

回答

1

似乎是一个非常奇怪的请求,并且很容易在应用程序端完成。但是在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 
+0

这很难,而且更多的是因为它是一个愚蠢的要求。 – Zane