1から4の変数を渡すことができるストアドプロシージャがあり、最も列が一致する行を返す必要があります。ヌルです)。 シーケンスは異なる必要があります。データとSQL Serverは、ほとんどの列が一致する場所を選択します。
例テーブル:
Client_Id Project_ID Phase Task Employee Sequence
--------- ---------- ----- ---- -------- --------
NULL NULL NULL NULL Chris 1
NULL NULL NULL NULL Bob 100
500 NULL NULL NULL Joe 1
500 2 NULL NULL Max 1
ように、クライアント100の結果は、任意のプロジェクト、フェーズまたはタスクには、単にクリスとボブのデフォルトのNULLレコードになります。クライアント500の場合、結果はJoeとBobになります。クライアント500、プロジェクト2の場合、結果はMaxとBobになります。 今、私はこの質問を、最初にタスクをチェックし、それをフェーズごとにクエリに参加させ、どの行も重複していないことを確認して、プロジェクトとクライアントのために同じことを行うことによって行っています。それは信じられないほど非効率的で、このことについてよりスマートな方法が必要です。何かご意見は?
EDIT - いくつかのクエリ例、私はすべてが
insert into #TempTracking
select p.employee, p.sequence
from invoices i, projects p
where i.client_id = p.client_id
and i.project_no = p.project_no
and i.phase = p.phase
and i.task = p.task
と一致した場合の最初のチェックそれから私は、クエリが少なく、特定作り、シーケンスが既に存在していないことを確認してください。
insert into #TempTracking
select p.employee, p.sequence
from invoices i, projects p
where (i.client_id = p.client_id or i.client_id is null)
and (i.project_no = p.project_no or i.project_no is null)
and (i.phase = p.phase or i.phase is null)
and (i.task = p.task or i.task is null)
and NOT EXISTS (SELECT * FROM #TempTracking t WHERE t.sequence = p.sequence)
どのバージョンのSQL Serverですか? – Matthew
'Client 500の場合、Project 2の結果はMaxとBobです.'Maxを返すだけでいいですか? –
Abeは良い点を挙げています.BobはClient 500、Project 2ではどのように有効な結果をもたらしましたが、Chrisはそうではありませんか? – Seph