通过此查询,我得到了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子句中。
如何正确理解语法?
答案 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