问题
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