【发布时间】:2012-11-22 10:53:03
【问题描述】:
我的表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
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql dynamic