2017-06-08 7 views
0

このクエリでは目が新鮮になる必要があります。私の問題は、最新の治療計画(txp_master txp)に署名を保存しているTXP_Digital_Signatures(tds)テーブルから引き出すために左結合をしていることです。このコードが行っていることは、tds.signedがnull(署名なし)またはN(No)とマークされた結果を戻すことです。これはうまくいきますが、このレポートが行ったことは、NoをNoにしておく必要があるということを人々に示していますが、Noを後にしておきます。そうすれば、Yesの場合は、tds.plan_idのそのバージョンではNoです。最新の署名ステータスがY(はい)の場合は、plan_idを取得します。以下のコードスニペットはwhereステートメントに追加されますが、新しいYがない場合でもすべてのNoを非表示にします(yes )。それだけで手直しする各tds.plan_idや方法については、最大(tds.dateを)引っ張るよう左の結合内で相関サブクエリを使用する

tds.date = (select Max(date) from TXP_Digital_Signatures where tds.plan_id = txp.plan_id) 

は誰もが、左への参加を相関サブクエリを追加するためのいずれかの方法を考えることができ、私のどこ文なしさんはそう新しいはいとnullのまだ表示されずに表示されます。基本的には、レポート全体をグループ化してレポートをやり直したいと思っているのですが、私はそれを助けて、私に何かのものを壊してもらい、基本的にはこのレポートを最初からやり直すようにしています。

(select Max(date) from TXP_Digital_Signatures x where x.plan_id = tds.plan_id) 

を現在、あなたはサブクエリTXP_Digital_Signaturesをフィルタリングされていません:あなたはこのように、サブクエリを修正する場合は、SQL 2008 R2

SELECT case_status, 
    CONVERT(CHAR(10), episode_open_date, 101)AS 'Enrolled' , 
    txp.patient_id, 
    p.lname+', ' + p.fname AS 'Client', 
    CONVERT(CHAR(10), txp.effective_date, 101)AS 'Effective', 
    CONVERT(CHAR(10), next_review_date, 101)AS 'Review', 
    txp.signed, 
    (SELECT location_code FROM staff s WHERE s.staff_id = txp_coordinator_id) AS 'Clinic', 
    (SELECT s.lname+', ' +s.fname FROM staff s WHERE s.staff_id = txp_coordinator_id) AS 'Coordinator', 
    (SELECT s.lname+', ' +s.fname FROM staff s WHERE s.staff_id = ts.team_member_id) AS 'Team', 
    ts.signed, 
    tds.signed as 'Patient Sig' 
FROM txp_master txp join patient p ON p.patient_id = txp.patient_id and p.episode_id = txp.episode_id 
    join txp_signature ts on ts.plan_id = txp.plan_id and ts.version_no = txp.version_no and ts.team_member_id <> txp.txp_coordinator_id 
    left join TXP_Digital_Signatures tds on tds.plan_id = txp.plan_id 

where p.case_status = 'A' and 
txp.status <> 'er' and patient_signed_date is null 
and tds.signed is null or tds.signed = 'N' 
and txp.effective_date > '2016-12-31 00:00:00.000' 
and tds.date = (select Max(date) from TXP_Digital_Signatures where tds.plan_id = txp.plan_id) 

order by patient_id 

答えて

2

あなたのクエリが動作するはずです。

もう1つ注意が必要なのは、がTXP_Digital_Signatures tdsにありますが、それはWHERE句に含めます。これにより、INNER JOINに変換されます。だからあなたが必要とするものを決めてそれに応じて変更してください。

TXP_Digital_Signatures tdsに関係なく結果を表示する場合は、これらの条件をON句に移動します。

あなただけTXP_Digital_Signatures tdsに基づいて結果が、その後INNER JOIN

+0

に変更したい場合は、返信いただきありがとうございます。私は少し混乱しています。サブクエリはどこに置くのですか?ちょうど選択で?それは最大の日付が何であるかを示しますが、N個の結果を新しいyesで結果に隠すことはありません。私はあなたが私の周りに私の参加を切り替える方法について少し混乱しています。私は、署名がないヌルの結果が必要なTXP_Digital_signaturesに関係なく結果を望みますが、あなたの説明から何を変更するかを正確には確認できません。ありがとう、ごめんなさい、私はコードの騒ぎです。 –

+2

コードの最終行がそのように表示されることをお勧めします。投稿したコードの問題は、 'tds'がそのサブクエリのTDSのインスタンスではなく、クエリの本体のインスタンスを参照しているということです。それはそれ自身のエイリアスが必要です。 –

+0

tdsを参照する 'WHERE'節(' tds.field = NULL'以外)は、TDSレコードがない場合を除外します。それをしたくない場合は、関連する 'JOIN'の' ON'節にその行を移動する必要があります。 –

関連する問題