2010-04-04 9 views
0

me aider s'il vous plaît avec cette simple requête E-sql:Entité Sql Groupe par problème, s'il vous plaît aider

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)"; 

Voici ce que j'ai.

J'ai simplement entité appelée OrdersIncomes avec ID,PaidMoney,DatePaid,Order_ID propriétés

Je veux choisir le mois et Summed PaidMoney comme ceci:

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) 

mais E-SQL doesnot travail et je ne sais pas quoi faire. ici mon E-SQL qui a besoin refactoring:

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)"; 

il y a une exception: ErrorDescription = « L'identifiant « o » est pas valide car il ne figure pas non plus dans une fonction d'agrégation ou dans la clause GROUP BY. » Si j'inclus o dans la clause group by, par exemple: FROM XACCModel.OrdersIncomes as o group by o alors je ne reçois pas les résultats cumulés. Est-ce un bug, ou ce que je fais mal?

Voici une requête Linq à des entités et il fonctionne aussi:

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) }; 

Répondre

2

Donnez un nom d'alias au groupe par clause et utiliser cet alias dans la clause select.

SELECT PaidMonth, SqlServer.Sum (o.PaidMoney) comme PaidMoney DE XACCModel.OrdersIncomes comme o groupe par SqlServer.Month (o.DatePaid) comme PaidMonth

+0

merci! . . . . . . . . . – Zviadi

Questions connexes