OK. I have checked again the query and I cannot figure out, why
instead of the totals, I always get "NULL"

For example, if I use a "simple" CASE statement, the result is OK:

IList query = session.CreateQuery("select account.Number,
 
account.Description,
                                                              sum(case
when entry.IsDebit = 1 then case when 1=1 then 2 else 4 end else 3
end)
                                                    from LedgerEntry
entry
                                                       inner join
entry.AccountId account
                                                          inner join
account.AccountTypeId accountType
                                                    group by
account.Number,
 
account.Description
                                                   order by
account.Number")
                              .List();

If I use my original query, the third column is always generated with
"NULL".

I was wondering whether nested CASE statement are supported/working. I
also installed the v2.1.1, but the result did not change.

Any help is really appreciated.

Thanks.
Mike







On Nov 9, 4:43 pm, Oskar Berggren <[email protected]> wrote:
> Is case supported in HQL (for your version of NHibernate)?
>
> /Oskar
>
> 2009/11/9 mikeusdev <[email protected]>:
>
>
>
> > You are right, sorry.
>
> >            ISession session = factory.OpenSession();
>
> >            StringBuilder sb = new StringBuilder();
> >            sb.Append("select account.Number, ");
> >            sb.Append("        account.Description, ");
> >            sb.Append("        sum(case ");
> >            sb.Append("              when entry.IsDebit = 1 then ");
> >            sb.Append("                case ");
> >            sb.Append("                  when entry.YearId < 6 and
> > accountType.ResetBalanceYearly = 1 then 0 ");
> >            sb.Append("                  when entry.YearId < 6 and
> > accountType.ResetBalanceYearly = 0 then entry.Amount ");
> >            sb.Append("                  when entry.YearId = 6 then
> > entry.Amount ");
> >            sb.Append("                end ");
> >            sb.Append("              else ");
> >            sb.Append("                case ");
> >            sb.Append("                  when entry.YearId < 6 and
> > accountType.ResetBalanceYearly = 1 then 0 ");
> >            sb.Append("                  when entry.YearId < 6 and
> > accountType.ResetBalanceYearly = 0 then entry.Amount * -1 ");
> >            sb.Append("                  when entry.YearId = 6 then
> > entry.Amount * -1 ");
> >            sb.Append("                end ");
> >            sb.Append("            end) ");
> >            sb.Append(" from LedgerEntry entry ");
> >            sb.Append("  inner join entry.AccountId account ");
> >            sb.Append("   inner join account.AccountTypeId accountType
> > ");
> >            sb.Append(" order by account.Number ");
> >            sb.Append(" group by account.Number, ");
> >            sb.Append("          account.Description");
>
> >            IList query = session.CreateQuery(sb.ToString())
> >                                           .List();
>
> > On Nov 9, 4:06 pm, Oskar Berggren <[email protected]> wrote:
> >> Formatting that to actually be readable might be a good idea.
>
> >> /Oskar
>
> >> 2009/11/9 mikeusdev <[email protected]>:
>
> >> > Hi,
>
> >> > I am getting an error message when I try to execute the following
> >> > query:
>
> >> > IList query = session.CreateQuery(@"select account.Number,
> >> > account.Description, sum(case when (entry.IsDebit = 1m) then case when
> >> > (entry.YearId < 6 and accountType.ResetBalanceYearly = 1) then 0m when
> >> > (entry.YearId < 6 and accountType.ResetBalanceYearly = 0) then
> >> > entry.Amount when (entry.YearId = 6) then entry.Amount end else case
> >> > when (entry.YearId < 6 and accountType.ResetBalanceYearly = 1) then 0m
> >> > when (entry.YearId < 6 and accountType.ResetBalanceYearly = 0) then
> >> > entry.Amount * -1 when (entry.YearId = 6) then entry.Amount * -1 end
> >> > end) as entry.Amount from LedgerEntry entry inner join entry.AccountId
> >> > account inner join account.AccountTypeId accountType group by
> >> > account.Number, account.Description order by account.Number")
> >> >                          .List();
>
> >> > The error message is the following:
>
> >> > '(' expected after HQL function in SELECT [select account.Number,
> >> > account.Description, sum(case when (entry.IsDebit = 1m) then case when
> >> > (entry.YearId < 6 and accountType.ResetBalanceYearly = 1) then 0m when
> >> > (entry.YearId < 6 and accountType.ResetBalanceYearly = 0) then
> >> > entry.Amount when (entry.YearId = 6) then entry.Amount end else case
> >> > when (entry.YearId < 6 and accountType.ResetBalanceYearly = 1) then 0m
> >> > when (entry.YearId < 6 and accountType.ResetBalanceYearly = 0) then
> >> > entry.Amount * -1 when (entry.YearId = 6) then entry.Amount * -1 end
> >> > end) as entry.Amount from Oberon.Model.BusinessModel.LedgerEntry entry
> >> > inner join entry.AccountId account inner join account.AccountTypeId
> >> > accountType group by account.Number, account.Description order by
> >> > account.Number]
>
> >> > Does anyone know what the problem is? I tried various combinations
> >> > (column aliases, for example), but I cannot see where the problem
> >> > lies.
>
> >> > Thanks.
> >> > Mike
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to