Join 2 subqueries

独自空忆成欢 提交于 2019-12-25 01:11:58

问题


I would appreciate any assistance w/this. I'm trying to perform a join on 2 subqueries, but it keeps saying the 'IntEncTracking.EncounterList.ClaimId' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause, but I've tried qualifying it with an el and q2, to no avail. Any advice would be greatly appreciated.

Declare @SweepId as int = 10160, @RunType as varchar = 'Initial'

Select * from (Select distinct ClaimId
     , LineNum
     , 0 as EncounterLineNum
     , EncounterType
     , InternalICN
     , PreviousDpwICN
     , 0 as ClaimFrequencyCd
     , EncounterPeriod
     , 2 as StatusCd
     , BypassReason
     , null as EncounterFileNm
     ,@SweepId as SweepId
  from IntEncTracking.EncounterList
 where bypassflag = 1) as q1

 join

 ( Select  ClaimId
     , 0 as LineNum
     , 0 as EncounterLineNum
     , EncounterType
     , InternalICN
     , PreviousDpwICN
     , max(ClaimFreqCd) as ClaimFreqCd
     , max(EncounterPeriod) as EncounterPeriod
     , case when exists (select 'x' 
                           from IntEncTracking.EncounterList el1 
                          where el1.claimid = claimid
                            and BypassFlag = 0) then 1 
            else 2 
         end stscd
     , case when @RunType = 'Initial' then 100 else 300 end as [StatusReasonCd]
     , null as EncounterFileNm
     , @SweepId as SweepId
  from IntEncTracking.EncounterList el
 where BypassFlag = 0) as q2

  on q1.ClaimId = q2.ClaimId and
     q1.LineNum = q2.LineNum and
     q1.EncounterLineNum = q2.EncounterLineNum and
     q1.EncounterType = q2.EncounterType and
     q1.InternalICN = q2.InternalICN  
     group by q1.ClaimId, q1.EncounterType, q1.InternalICN, q1.PreviousDpwICN      
     order by q2.ClaimId, q2.LineNum, q2.EncounterLineNum, q2.EncounterType, q2.InternalICN

回答1:


this is just a syntex..

Declare @SweepId as int = 10160, @RunType as varchar = 'Initial' 

select *

from   (Select distinct ClaimId
     , LineNum
     , EncounterLineNum
     , 0
     , EncounterType
     , InternalICN
     , PreviousDpwICN
     , 0
     , EncounterPeriod
     , 2
     , BypassReason
     , null
     ,@SweepId
  from IntEncTracking.EncounterList
 where bypassflag = 1) as q1

join    
     (Select  ClaimId
     , 0 as LineNum
     , 0 as EncounterLineNum
     , EncounterType
     , InternalICN
     , PreviousDpwICN
     , max(ClaimFreqCd) as ClaimFreqCd
     , max(EncounterPeriod) as EncounterPeriod
     , case when exists (select 'x' 
                           from IntEncTracking.EncounterList el1 
                          where el1.claimid = claimid
                            and BypassFlag = 0) then 1 
            else 2 
         end stscd
     , case when @RunType = 'Initial' then 100 else 300 end as [StatusReasonCd]
     , null as EncounterFileNm
     , @SweepId
  from IntEncTracking.EncounterList el
 where BypassFlag = 0) as q2


 on q1.ClaimId = q2.ClaimId and
 on q1.LineNum = q2.LineNum and
 on q1.EncounterLineNum = q2.EncounterLineNum and
 on q1.EncounterType = q2.EncounterType and
 on q1.InternalICN = q2.InternalICN 
 group by ClaimId, encountertype, internalicn, PreviousDpwICN
  order by ClaimId, LineNum, EncounterLineNum,EncounterType,InternalICN



回答2:


I always do this sort of stuff like this

    ;with EncounterValues as(
    SELECT
    CommonValueOrId,
    ect..
    FROM
    IntEntTracking.EncountrList
    )

    , EncounterFileNums as(
    SELECT
    CommonValueOrId,
    ect..
    FROM
    IntEncTracking.EncounterList
    )

    SELECT
    ev.AnyField,
    efn.AnyField
    FROM
    EncounterValues ev
    LEFT JOIN EncounterFileNums efn
    ON ev.CommonValueOrId = evn.CommonValueOrId

Not sure what the implications of doing it this way is but might be worth giving it a go if you're struggling.



来源:https://stackoverflow.com/questions/17685484/join-2-subqueries

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!