在Inner Join Query之间使用Where子句

时间:2017-11-02 13:11:43

标签: postgresql openerp

我希望获取记录,并且我已经遇到了一个场景,其中我必须在使用内部联接的select查询之间包含其他where子句。

select stp.sales_person as "Sales_Person",
max(case when stp.jan_month is null then 0 else stp.jan_month end) as "January",
select sum(so.amount_total) from sale_order so inner join res_users ru on ru.id=so.user_id
where date(so.confirmation_date) > '2017-01-01' and date(so.confirmation_date) < '2017-01-30', 
max(case when stp.feb_month is null then 0 else stp.feb_month end) as "February",   
max(case when stp.march_month is null then 0 else stp.march_month end) as "March",   
max(case when stp.dec_month is null then 0 else stp.dec_month end) as "December"
from sales_target_record stp
inner join res_partner rp on rp.name=stp.sales_person inner join res_users ru on ru.partner_id = rp.id inner join crm_team ct on ru.sale_team_id = ct.id     
where ct.name = 'Direct Sales' group by stp.sales_person

我必须插入我尝试使用sum的列,但不能用作连接查询

1 个答案:

答案 0 :(得分:0)

如果这是真正的SQL Server

,则查询中存在语法问题
select 
    stp.sales_person as Sales_Person,
    max(case 
            when stp.jan_month is null 
                then 0 
                else stp.jan_month 
        end) as January,
        --This needed parenthese since it's a subquery. Though, it's uncorrelated
        (   select sum(so.amount_total) 
             from sale_order so 
             inner join res_users ru on ru.id=so.user_id
             where cast(so.confirmation_date as date) > '2017-01-01' and cast(so.confirmation_date as date) < '2017-01-30'
             --here you need to add something like stp.someColumn = so.SomeColumn to correlate it to the outer query
        ) as SomeNewColumnUnCorrelated, 
    max(case 
            when stp.feb_month is null 
                then 0 
                else stp.feb_month 
        end) as February,   
    max(case 
            when stp.march_month is null 
                then 0 
                else stp.march_month 
        end) as March,   
    max(case 
            when stp.dec_month is null 
                then 0
                else stp.dec_month 
        end) as December
from 
    sales_target_record stp
inner join 
    res_partner rp on 
    rp.name=stp.sales_person 
inner join
    res_users ru on 
    ru.partner_id = rp.id     
where 
    ct.name = 'Direct Sales'
group by 
    stp.sales_person