私のテーブルicdClm
は、人の人口統計を含むテーブルと、その人に関連するさまざまな関心コードをリストする別のテーブルとの間のジャンクション テーブルです。これらのテーブルに可変回数参加できるようにしたいと思います。この時点では単純にするために、関係に関係する他のテーブルには興味がありません。クエリの生成を支援したいwhile loop
(別の実装を受け入れるより良い方法がある場合)。
以下は、クエリが 2 回実行された場合の望ましい出力です (2 つの派生テーブルに対して 2 回)。
select distinct x1.patid
from
(
select ic.patid
from icdClm as ic
where ic.icd like '123%'
) x1 inner join
(
select ic.patid
from icdClm as ic
where ic.icd like '456%'
)x2 on x1.patid=x2.patid
inner join
(
select ic.patid
from icdClm as ic
where ic.icd like '789%'
) x3 on x1.patid=x3.patid
派生テーブルのエイリアスが 1 ずつ増えることに注意してください。今私のコードのために。このコードはエラーを生成しませんが、10 分以上実行したままにし、結果がまだ返されていません。最終的には、このストアド プロシージャに依存する別のストアド プロシージャを作成し、必要な派生テーブルの数を尋ねてから、ユーザーから入力されたパラメーターを入力したいと思いますwhere ic.icd like '123%'
が、まず最初に、以下のクエリで何が機能していないのでしょうか?
declare
@x int
,@y int
,@sql nvarchar(1000)
select
@x=1
,@y=3
,@sql =
'select distinct x1.patid
from
(
select ic.patid
from icdClm as ic
where ic.icd like ''123%''
) x1'
while @x < @y
begin;
set @sql=@sql+
'inner join
(
select ic.pati
from icdClm as ic
where ic.icd like ''456%''
) x1 on x'+CAST(@y as CHAR(10))+'.patid=x1.patid'
set @y=@y+1
end;
print @sql