2014-03-27 105 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