在SQL Server中使用GROUP BY

时间:2015-06-17 06:10:32

标签: sql-server sql-server-2008

通过此查询,我得到了2列不同的值

SELECT DISTINCT 
    Transport.ID, Transport.Address 
FROM  
    Cars 
LEFT JOIN 
    Transport ON Cars.TransportFrom=Transport.ID 
ORDER BY 
    address

现在我需要再添一个列:

SUM(CASE WHEN Active='True' THEN 1 ELSE 0 END) 

但是如果我做像

这样的查询,我会收到错误
SELECT DISTINCT 
    Transport.ID, Transport.Address, 
    SUM(CASE WHEN Active = 'True' THEN 1 ELSE 0 END)
FROM 
    Cars 
LEFT JOIN 
    Transport ON Cars.TransportFrom = Transport.ID 
ORDER BY 
    address
  

Msg 8120,Level 16,State 1,Line 1
  列'Transport.ID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

SELECT 
    Transport.ID, Transport.Address, 
    SUM(CASE WHEN Active = 'True' THEN 1 ELSE 0 END)
FROM 
    Cars 
LEFT JOIN 
    Transport ON Cars.TransportFrom = Transport.ID 
ORDER BY 
    address
GROUP BY 
    ID
  

Msg 156,Level 15,State 1,Line 5
  关键字“GROUP”附近的语法不正确。

SELECT 
    Transport.ID, Transport.Address, 
    SUM(CASE WHEN Active = 'True' THEN 1 ELSE 0 END)
FROM 
    Cars 
LEFT JOIN 
    Transport ON Cars.TransportFrom = Transport.ID 
GROUP BY 
    ID
ORDER BY 
    address
  

Msg 209,Level 16,State 1,Line 4
  不明确的列名称'ID'。

SELECT 
    Transport.ID, Transport.Address, 
    SUM(CASE WHEN Active = 'True' THEN 1 ELSE 0 END)
FROM 
    Cars 
LEFT JOIN 
    Transport ON Cars.TransportFrom = Transport.ID 
GROUP BY 
    Transport.ID
ORDER BY 
    address
  

Msg 8120,Level 16,State 1,Line 1
  列'Transport.address'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

如何正确理解语法?

1 个答案:

答案 0 :(得分:5)

错误信息是否清楚,没有?

SELECT Transport.ID, Transport.Address, SUM(CASE WHEN Active='True' THEN 1 ELSE 0 END)
FROM Cars 
LEFT JOIN Transport ON Cars.TransportFrom=Transport.ID 
--add all the fields from select clause which are not in an aggregation function
GROUP BY Transport.ID, Transport.Address 
ORDER BY address
相关问题