2015-06-17 6 views
2

С помощью этого запроса я получил 2 колонки различных значенийИспользование GROUP BY в SQL Server

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, уровень 16, состояние 1, строка 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, уровень 16, состояние 1, строка 1
Колонка 'Transport.address' недопустим в списке выбора, поскольку он не содержится ни в статистической функции или GROUP BY пункт.

Как правильно получить синтаксис?

+3

Вы должны добавить 'Transport.Address' в предложение' GROUP BY'. –

ответ

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 
+0

Да, спасибо. решаемая –