Las columnas que haya agregado en la cláusula SELECT sin una función agregada deben estar en la cláusula GROUP BY.
Para que quede un poco claro:
Tome este ejemplo:
Tiene TransactionID, AccountID, TransactionAmount, TransactionDate en su cláusula SELECT, y necesita SUM (TransactionAmount) en todas las fechas, en ese caso, si agrega
SELECT TransactionDate, TransactionID, AccountID, SUM(TransactionAmount)
FROM Table
GROUP BY TransactionDate
Entonces obtendrá un error, por qué porque
Suponga que tiene 4 transacciones en 20160101 y cada cantidad de transacción es de $ 1000
Su expectativa de resultado será
TransDate TransAmt
20140101 4000
En este caso, si trae otros atributos en la cláusula SELECT como AccountID y TransactionID, ¿a dónde irán? Esta es la razón por la que tenemos que incluir todos los atributos en la Cláusula GROUP en la cláusula SELECT, excepto el que tiene la función AGGREGATE.