Thanks.

quarta-feira, 3 de Abril de 2019 às 17:12:44 UTC+1, tim....@conted.ox.ac.uk 
escreveu:
>
> Apologies.  Left a lot of cruft in there which should be edited out now.
>
> On Wednesday, 3 April 2019 17:10:49 UTC+1, tim....@conted.ox.ac.uk wrote:
>>
>> That will be different.  SQLFORM.grid doesn't support aggregation, so 
>> you'll need to use virtual fields to do the work, which is what I do to 
>> show invoices along with their current calculated balance.  It's not 
>> sortable, though.
>>
>> Something like:
>>
>> def is_operador(row):
>>     return not db(
>>         (row.auth_user.id == db.auth_membership.user_id)
>>         & (db.auth_group.id == db.auth_membership.group_id)
>>         & (db.auth_group.role == 'operador')
>>     ).isempty()
>>
>> db.auth_user.is_operador = Field.Virtual('is_operador', is_operador)
>>
>> grid = SQLFORM.grid(
>>     db.auth_user
>> )
>>
>> You'll need a virtual field for each row, and it's running subqueries so 
>> it's not as light on the DB, but it works without needing a hand-rolled 
>> table.
>>
>>
>> On Wednesday, 3 April 2019 16:37:16 UTC+1, João Matos wrote:
>>>
>>> Thanks. That worked. I just corrected the groupby you sent.
>>>
>>> Now I have another problem. Unfortunately a SQLFORM.grid doesn't accept 
>>> a SELECT.
>>> The only solution I have is to create a view in SQLite, which defies the 
>>> purpose of moving from the SQLite SELECT to DAL.
>>>
>>> Any ideas on how I can solve this?
>>>
>>> Thanks,
>>>
>>> JM
>>>
>>> quarta-feira, 3 de Abril de 2019 às 16:24:24 UTC+1, 
>>> tim....@conted.ox.ac.uk escreveu:
>>>>
>>>> I think that implicit conversion of "auth_group.role = 'Operador'" to a 
>>>> 1 is a Sqlite-specific thing.  What you want to use here is case:
>>>>
>>>> query = db().select(
>>>>     db.auth_user.id,
>>>>     db.auth_user.username,
>>>>     db.auth_user.canceled_on,
>>>>     db.auth_user.canceled_by,
>>>>     (db.auth_group.role == 'Operador').case(1, 0).sum().with_alias('
>>>> operador'),
>>>>     (db.auth_group.role == 'Verificador').case(1, 0).sum().with_alias('
>>>> verificador'),
>>>>     (db.auth_group.role == 'Supervisor').case(1, 0).sum().with_alias('
>>>> Supervisor'),
>>>>
>>>>     left=(
>>>>         db.auth_membership.on(db.auth_user.id == db.auth_membership.
>>>> user_id),
>>>>         db.auth_group.on(db.auth_group.id == db.auth_membership.
>>>> group_id),
>>>>     ),
>>>>     groupby=[db.auth_user.username, db.auth_user.id, db.auth_user.
>>>> canceled_on, db.auth_user.canceled_by],
>>>>     orderby=db.auth_user.username,
>>>> )
>>>>
>>>> On Monday, 1 April 2019 23:41:51 UTC+1, João Matos wrote:
>>>>>
>>>>> Hello,
>>>>>
>>>>> I have this SELECT in SQLite
>>>>>
>>>>>     result = db.executesql(
>>>>>             "SELECT auth_user.id, auth_user.username, "
>>>>>             "auth_user.canceled_on, "
>>>>>             "auth_user.canceled_by, "
>>>>>             "SUM(auth_group.role = 'Operador') operador, "
>>>>>             "SUM(auth_group.role = 'Verificador') verificador, "
>>>>>             "SUM(auth_group.role = 'Supervisor') supervisor "
>>>>>             "FROM auth_user "
>>>>>             "LEFT JOIN auth_membership ON auth_user.id = 
>>>>> auth_membership.user_id "
>>>>>             "LEFT JOIN auth_group ON auth_group.id = 
>>>>> auth_membership.group_id "
>>>>>             "GROUP BY username ORDER BY username"
>>>>>     )
>>>>>
>>>>> and would like to convert it to web2py's DAL.
>>>>> I made this
>>>>>
>>>>> query = db().select(
>>>>>     db.auth_user.id,
>>>>>     db.auth_user.username,
>>>>>     db.auth_user.canceled_on,
>>>>>     db.auth_user.canceled_by,
>>>>>     left=(
>>>>>         db.auth_membership.on(db.auth_user.id == db.auth_membership.
>>>>> user_id),
>>>>>         db.auth_group.on(db.auth_group.id == db.auth_membership.
>>>>> group_id),
>>>>>     ),
>>>>>     groupby=db.auth_user.username,
>>>>>     orderby=db.auth_user.username,
>>>>> )
>>>>>
>>>>> but I can't find any way to integrate the sums.
>>>>>
>>>>> Does anyone know how to do it?
>>>>>
>>>>> Thanks,
>>>>>
>>>>> JM
>>>>>
>>>>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to