2017-02-01 17 views
0

私は、データベースの2つのテーブルのセットから引き出すTSQLクエリを作成しました。共通テーブル式のテーブルは、メインクエリのテーブルとは異なります。私はMRNに参加しており、両方のテーブルセットのアカウントを含む最終結果が必要です。私は、この目的のために、次のクエリを書いている:メインクエリ出力にCTEの結果を追加するにはどうすればよいですか?

with cteHosp as(
select Distinct p.EncounterNumber, p.MRN, p.AdmitAge 
from HospitalPatients p 
inner join Eligibility e on p.MRN = e.MRN 
inner join HospChgDtl c on p.pt_id = c.pt_id 
inner join HospitalDiagnoses d on p.pt_id = d.pt_id 
where p.AdmitAge >=12 
    and d.dx_cd in ('G89.4','R52.1','R52.2','Z00.129') 
) 
Select Distinct a.AccountNo, a.dob, DATEDIFF(yy, a.dob, GETDATE()) as Age 
from RHCCPTDetail c 
inner join RHCAppointments a on c.ClaimID = a.ClaimID 
inner join Eligibility e on c.hl7Id = e.MRN 
full outer join cteHosp on e.MRN = cteHosp.MRN 
where DATEDIFF(yy, a.dob, getdate()) >= 12 
and left(c.PriDiag,7) in ('G89.4','R52.1','R52.2', 'Z00.129') 
or (
DATEDIFF(yy, a.dob, getdate()) >= 12 
and LEFT(c.DiagCode2,7) in ('G89.4','R52.1','R52.2','Z00.129') 
) 
or (
DATEDIFF(yy, a.dob, getdate()) >= 12 
and LEFT(c.DiagCode3,7) in ('G89.4','R52.1','R52.2','Z00.129') 
) 
or (
DATEDIFF(yy, a.dob, getdate()) >= 12 
and LEFT(c.DiagCode4,7) in ('G89.4','R52.1','R52.2','Z00.129') 
) 
order by AccountNo 

私は結果の1セットにまとめて共通テーブル式とメイン・クエリの両方の出力をマージするにはどうすればよいですか?

+0

マージとはどういう意味ですか?あなたの 'cte'と最後の' select'ステートメントは異なる列を持っています。最後の出力に 'cte'カラムを追加するだけですか?そうであれば、別のテーブルと同じように参照してください。 – iamdave

+0

CTEの結果をメインのクエリ結果にマージしようとしています。列の名前を同じにする必要がありますか?もしそうなら、私はどのようにマージ構文を構造化するのですか? – SidC

+0

もう一度、マージしたらどういう意味ですか?あなたの質問に希望の出力を加えてください。私たちは読者ではありません。 – iamdave

答えて

0

マージは、挿入、更新、または削除を実行します。私はあなたがcteに参加したいと信じています。そうであれば、ここに例があります。

cteBatchが以下のメインクエリに結合されていることに注意してください。

with 
cteBatch (BatchID,BatchDate,Creator,LogID) 
as 
(
    select 
    BatchID 
    ,dateadd(day,right(BatchID,3) -1, 
     cast(cast(left(BatchID,4) as varchar(4)) 
     + '-01-01' as date)) BatchDate 
    ,Creator 
    ,LogID 
    from tblPriceMatrixBatch b 
    unpivot 
    (
     LogID 
     for Logs in (LogIDISI,LogIDTG,LogIDWeb) 
    )u 
) 

Select 
0 as isCurrent 
,i.InterfaceID 
,i.InterfaceName 
,b.BatchID 
,b.BatchDate 
,case when isdate(l.start) = 0 and isdate(l.[end]) = 0 then 'Scheduled' 
      when isdate(l.start) = 1 and isdate(l.[end]) = 0 then 'Running' 
      when isdate(l.start) = 1 and isdate(l.[end]) = 1 and isnull(l.haserror,0) = 1 then 'Failed' 
      when isdate(l.start) = 1 and isdate(l.[end]) = 1 and isnull(l.haserror,0) != 1 then 'Success' 
      else 'idunno' end as stat 
,l.Start as StartTime 
,l.[end] as CompleteTime 
,b.Creator as Usr 

from EOCSupport.dbo.Interfaces i 
join EOCSupport.dbo.Logs l 
on i.InterfaceID = l.InterfaceID 
join cteBatch b 
on b.logid = l.LogID 
関連する問題