根据一行计算多行

时间:2018-08-28 12:37:01

标签: sql sql-server

我想我没有得到搜索结果,因为我在输入标题时遇到了麻烦。

我的桌子看起来像这样:

Name        Element  City  
Design Inc  51024    New York  
Plant Corp  51024    Chicago  
Energy Ltd  9665     Boston

如果我写

Select Name, Element, City  
From Table  
Where City = 'New York'

基于Element,这里是相同的值,我希望输出为

For New York  
Name = 2  
Element = 1  

与芝加哥相同的输出。我在where子句中遇到麻烦,因为显然如果我将=放到城市中,我得到的只是一行。

谢谢

2 个答案:

答案 0 :(得分:1)

您需要GROUP BY子句:

SELECT COUNT(Name) AS Name_count, COUNT(DISTINCT Element) AS Element_count
FROM Table t
WHERE City = 'New York'
GROUP BY Element;

答案 1 :(得分:0)

您可以使用EXISTS来获取element与城市所在的纽约相同的所有行。然后使用count()进行计数。

SELECT count(DISTINCT t1.name),
       count(DISTINCT t1.element)
       FROM elbat t1
       WHERE EXISTS (SELECT *
                            FROM elbat t2
                            WHERE t2.element = t1.element
                                  AND t2.city = 'New York');