On Wed, Mar 30, 2011 at 6:56 PM, Massimo Di Pierro
<massimo.dipie...@gmail.com> wrote:
> yes. I do not know how to do it with one query.
>
> On Mar 30, 3:18 pm, Joaquin Orbe <joaquino...@gmail.com> wrote:
>> On Sat, Mar 26, 2011 at 6:30 PM, Massimo Di Pierro
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> <massimo.dipie...@gmail.com> wrote:
>> > You an have a nested select in place of a field.
>>
>> > I think you want:
>> > count = db.sales_order.id.count()
>> > query = db.sales_order.VendorID == db.vendor.id
>> > rows1 = db(query)
>> > (db.sales_order.Status==1).select(db.vendor.id,db.vendor.Name,count)
>> > rows2 = db(query)
>> > (db.sales_order.Status==2).select(db.vendor.id,db.vendor.Name,count)
>> > rows3 = db(query)
>> > (db.sales_order.Status==3).select(db.vendor.id,db.vendor.Name,count)
>>
>> > On Mar 26, 3:57 pm, Joaquin Orbe <joaquino...@gmail.com> wrote:
>> >> Hi all,
>>
>> >> I'm trying to get a result for this query:
>>
>> >> select vendor.id, vendor.Name,
>> >> (select count(*) from sales_order where [Status] = 1 and vendor.id =
>> >> sales_order.VendorID),
>> >> (select count(*) from sales_order where [Status] = 2 and vendor.id =
>> >> sales_order.VendorID),
>> >> (select count(*) from sales_order where [Status] = 3 and vendor.id =
>> >> sales_order.VendorID)
>> >> from vendor
>>
>> >> and for it I do:
>>
>> >> countOpen = db((db.sales_order.Status==1)&(db.sales_order.VendorID ==
>> >> db.vendor.id)).count()
>> >> countProg = db((db.sales_order.Status==2)&(db.sales_order.VendorID ==
>> >> db.vendor.id)).count()
>> >> countClosed = db((db.sales_order.Status==3)&(db.sales_order.VendorID
>> >> == db.vendor.id)).count()
>>
>> >> rows = db().select(db.vendor.id, 
>> >> db.vendor.Name,countOpen,countProg,countClosed)
>>
>> >> but it's not working because I get
>>
>> >> (1, vendor1, 1, 4, 1)
>> >> (2, vendor2, 1, 4, 1)
>>
>> >> instead of
>>
>> >> (1, vendor1, 1, 4, 1)
>> >> (2, vendor2, 0, 0, 0)
>>
>> >> It seems the result of vendor1 is also applied to vendor2 (vendor2
>> >> does not have records in sales_order table).
>>
>> >> Does someone know how to solve it?
>>
>> >> Thanks in advance,
>> >> Joaquin.
>>
>> Hi Massimo,
>> sorry for my late answer.
>>
>> How should I applied your suggestion? As I can understand, your code
>> seems to have three row results, and in my case I need only one. Is it
>> correct my understanding?
>>
>> Thanks,
>> Joaquin.

It's ok Massimo, thanks anyway. I've solved it with an executesql
statement for the moment.

BTW, I've been playing with dql.py trying to support this scenario but
the code is a bit messy to publish here. I could get it work but I
don't know if this could have impact in another place (I'm still a
newbie). I'll post it here once I apply a cleaning on it.


Thanks for all,
Joaquin.

Reply via email to