我的表icdClm
是具有人員統計信息的表與另一個表(列出與該人相關的各種感興趣代碼)之間的聯結表。我希望能夠將這些表加入不同的次數。我對這個關係中涉及的其他表格不感興趣,因爲這裏簡單起見。我想要一個while loop
來幫助生成查詢(如果有更好的方法,我打開一個不同的實現。)具有可變表連接數的動態SQL
如果查詢要運行兩次(兩個派生表)。
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 @[email protected]+
'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 @[email protected]+1
end;
print @sql
你是對的,它是@x應該增加,因爲杜!否則它會是一個無限循環。現在查詢實際運行,我可以看到一些其他的錯誤,但這是我的問題的關鍵。 gracias,高級frix。 – wootscootinboogie
:)作爲一邊我會在連接條款,而不是內聯視圖中與AND&icdClm x1 INNER JOIN icdClm x2上x1.patid = x2.patid和x1.icd像''123%''...'但我不確定這會讓事情變得更好 –
這就是我首先想到的,但是當我將它散列出來時,這種方式似乎更容易。我會做一些測試,以及哪一個更快,我會滾。 – wootscootinboogie