加入2个子查询

时间:2013-07-16 19:36:33

标签: sql join subquery

我将不胜感激任何协助。我正在尝试在2个子查询上执行连接,但它一直说选择列表中的'IntEncTracking.EncounterList.ClaimId'无效,因为它不包含在聚合函数或GROUP BY子句中,但我已经尝试用el和q2来限定它,但无济于事。任何建议都将不胜感激。

  

声明@SweepId为int = 10160,@ RunType为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

2 个答案:

答案 0 :(得分:0)

这只是一个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

答案 1 :(得分:0)

我总是做这样的事情

    ;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

不确定这样做的含义是什么,但如果你正在努力,可能值得一试。