我的表icdClm
是一个包含人员人口统计数据的表和另一个列出与该人相关的各种兴趣代码的表之间的连接表。我希望能够多次加入这些表格。由于此时简单起见,我对关系中涉及的其他表不感兴趣。我想要一个while loop
帮助生成查询(如果有更好的方法我对不同的实现持开放态度。)
如果查询运行两次(两个派生表运行两次),以下是所需的输出。
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