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 oEntã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) };
Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top