Entidade SQL Group por Problem, por favor ajude
-
24-09-2019 - |
Pergunta
Ajude-me por favor com esta consulta simples e-SQL:
var qStr = "SELECT SqlServer.Month(o.DatePaid) as month, SqlServer.Sum(o.PaidMoney) as PaidMoney FROM XACCModel.OrdersIncomes as o group by SqlServer.Month(o.DatePaid)";
Aqui está o que eu tenho.
Eu tenho uma entidade simples chamada OrdersIncomes
com ID,PaidMoney,DatePaid,Order_ID
propriedades
Quero selecionar o mês e o pagamento de payoney somado assim:
month Paidmoney
1 500
2 700
3 1200
T-SQL looks like this and works fine:
select MONTH(o.DatePaid), SUM(o.PaidMoney)
from OrdersIncomes as o
group by MONTH(o.DatePaid)
results:
-----------
3 31.0000
4 127.0000
5 20.0000
(3 row(s) affected)
Mas o e-sql não funciona e eu não sei o que fazer. Aqui meu e-SQL, que precisa de refatorar:
var qStr = "SELECT SqlServer.Month(o.DatePaid) as month, SqlServer.Sum(o.PaidMoney) as PaidMoney FROM XACCModel.OrdersIncomes as o group by SqlServer.Month(o.DatePaid)";
Há uma exceção: errorDescription = "O identificador 'O' não é válido porque não está contido nem em uma função agregada ou no grupo por cláusula".
Se eu incluir a cláusula de grupo por grupo, como: FROM XACCModel.OrdersIncomes as o group by o
Então eu não sou resumido e agregado resultados. Isso é um bug, ou o que estou fazendo de errado?
Aqui está uma consulta LINQ para entidades e também funciona:
var incomeResult = from ic in _context.OrdersIncomes
group ic by ic.DatePaid.Month into gr
select new { Month = gr.Key, PaidMoney = gr.Sum(i => i.PaidMoney) };
Solução
Dê um nome de alias ao grupo por cláusula e use esse alias na cláusula selecionada.
Selecione PAYMONTH, SQLSERVER.SUM (O.PaidMoney) como PayMoney de xaccmodel.ordersincomes como o grupo por sqlserver.month (O.DatePaid) como PAYMONTH