簡體   English   中英

左內連接時選擇帶分組的情況

[英]inside left join select with case when select where grouped by

我有這段代碼返回我想要的結果;

select stktype, Part_No,
Case when stktype = 'labour' then Part_No END
from fleet_job_jobdetails
where JobCode = '176071' AND StkType = 'labour'
group by part_no, StkType

stktype Part_No(無列名)Labor ANDR ANDR

當我將其添加到較大的代碼中時,出現錯誤

LEFT JOIN (
           SELECT   jobcode
           ,        SUM(linecost) AS totalcost
           ,        SUM(CASE WHEN stktype = 'sublet' THEN linecost
                             ELSE 0
                        END) AS subletcost
           ,        SUM(CASE WHEN stktype = 'labour' THEN linecost
                             ELSE 0
                        END) AS labourcost
           ,        SUM(CASE WHEN stktype = 'part' THEN linecost
                             ELSE 0
                        END) AS partscost
           ,        SUM(CASE WHEN stktype NOT IN ('sublet', 'labour', 'part') THEN linecost
                             ELSE 0
                        END) AS othercost
        ,           **CASE WHEN (select StkType from fleet_job_jobdetails WHERE stktype = 'labour')  = 'labour' THEN Part_No  ELSE '' END AS Mech**
           FROM     fleet_job_jobdetails
           GROUP BY jobcode, Part_No
          ) a
        ON fleet_job_jobmaster.jobcode = a.jobcode

Part_No 僅在這種情況下

** CASE
                       WHEN (select StkType
                               from fleet_job_jobdetails
                              WHERE stktype = 'labour') = 'labour' THEN
                        Part_No

因此不會出現Part_No的情況,您必須修改該語句以確保Part_No存在,並且在WHEN THEN不存在

或者你只是只組jobcode

嘗試這個:

LEFT JOIN (
       SELECT   jobcode
       ,        SUM(linecost) AS totalcost
       ,        SUM(CASE WHEN stktype = 'sublet' THEN linecost
                         ELSE 0
                    END) AS subletcost
       ,        SUM(CASE WHEN stktype = 'labour' THEN linecost
                         ELSE 0
                    END) AS labourcost
       ,        SUM(CASE WHEN stktype = 'part' THEN linecost
                         ELSE 0
                    END) AS partscost
       ,        SUM(CASE WHEN stktype NOT IN ('sublet', 'labour', 'part') THEN linecost
                         ELSE 0
                    END) AS othercost
                    --Here seems subquery is not required we can simply replace with it
        ,           CASE WHEN stktype = 'labour' THEN Part_No  ELSE '' END AS Mech 
       FROM     fleet_job_jobdetails
       GROUP BY jobcode, Part_No
      ) a
    ON fleet_job_jobmaster.jobcode = a.jobcode

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM