我希望“主查询”的结果与第一个查询的结果中存在标识符的次数一样多,并且像第二个和第三个结果窗口中那样使它们紧随其后设置。
预先感谢您的帮助!
编辑:查询的文本版本
ROW_NUMBR()
第一个查询的结果返回多个标识符(int),两个下一个查询的结果始终是,仅填充col1列,然后填充col2列的几行,它描述了一个层次结构
答案 0 :(得分:1)
我会使用cross apply
select
case grap.niveau when 0 Then p.identifiantuniversel + ' - ' + Isnull(pm.SIREN,'(pas de siren)') + ' - ' + pm.raisonsociale else '' end as col1,
case grap.niveau when 1 Then p.identifiantuniversel + ' - ' + Isnull(pm.SIREN,'(pas de siren)') + ' - ' + pm.raisonsociale else '' end as col2,
case grap.niveau when 2 Then p.identifiantuniversel + ' - ' + Isnull(pm.SIREN,'(pas de siren)') + ' - ' + pm.raisonsociale else '' end as col3,
pm.SIREN
from (values(23), (25)) t(a)
cross apply GetGrappageParLien531(t.a) grap
join t_personne p on grap.Pers_filiale = p.idpersonne
join t_personne_morale pm on pm.idpersonne = p.idpersonne
答案 1 :(得分:1)
您可以使用第一个查询来创建CURSOR,然后对CURSOR的每次迭代执行“ Main”查询。
答案 2 :(得分:1)
cross apply
解决方案可能不是最坏的主意。也许您可以尝试以下方法:
select id_personne_groupe,
case grap.niveau when 0 Then p.identifiantuniversel + ' - ' + Isnull(pm.SIREN,'(pas de siren)') + ' - ' + pm.raisonsociale else '' end as col1,
case grap.niveau when 1 Then p.identifiantuniversel + ' - ' + Isnull(pm.SIREN,'(pas de siren)') + ' - ' + pm.raisonsociale else '' end as col2,
case grap.niveau when 2 Then p.identifiantuniversel + ' - ' + Isnull(pm.SIREN,'(pas de siren)') + ' - ' + pm.raisonsociale else '' end as col3,
pm.SIREN
from t_groupe CROSS APPLY
GetGrappageParLien531(t_group.id_personne_groupe) grap
join t_personne p on grap.Pers_filiale = p.idpersonne
join t_personne_morale pm on pm.idpersonne = p.idpersonne
where t_groupe.idgroupe > 0
对于select id_personne_groupe from t_groupe where idgroupe > 0
的每个结果,这应该评估“主查询”
答案 3 :(得分:1)
假设您要使用功能id_personne_groupe
来遍历GetGrappageParLien531
并正确过滤,则可以使用以下光标:
DECLARE @id_personne_groupe INT
DECLARE PersonneGroupeCursor CURSOR FOR
select id_personne_groupe from t_groupe where idgroupe > 0
OPEN PersonneGroupeCursor
FETCH NEXT FROM PersonneGroupeCursor INTO @id_personne_groupe
WHILE @@FETCH_STATUS = 0
BEGIN
-- "Main query"
select
case grap.niveau when 0 Then p.identifiantuniversel + ' - ' + Isnull(pm.SIREN,'(pas de siren)') + ' - ' + pm.raisonsociale else '' end as col1,
case grap.niveau when 1 Then p.identifiantuniversel + ' - ' + Isnull(pm.SIREN,'(pas de siren)') + ' - ' + pm.raisonsociale else '' end as col2,
case grap.niveau when 2 Then p.identifiantuniversel + ' - ' + Isnull(pm.SIREN,'(pas de siren)') + ' - ' + pm.raisonsociale else '' end as col3,
pm.SIREN
from GetGrappageParLien531(@id_personne_groupe) grap
join t_personne p on grap.Pers_filiale = p.idpersonne
join t_personne_morale pm on pm.idpersonne = p.idpersonne
select
case grap.niveau when 0 Then p.identifiantuniversel + ' - ' + Isnull(pm.SIREN,'(pas de siren)') + ' - ' + pm.raisonsociale else '' end as col1,
case grap.niveau when 1 Then p.identifiantuniversel + ' - ' + Isnull(pm.SIREN,'(pas de siren)') + ' - ' + pm.raisonsociale else '' end as col2,
case grap.niveau when 2 Then p.identifiantuniversel + ' - ' + Isnull(pm.SIREN,'(pas de siren)') + ' - ' + pm.raisonsociale else '' end as col3,
pm.SIREN
from GetGrappageParLien531(@id_personne_groupe) grap
join t_personne p on grap.Pers_filiale = p.idpersonne
join t_personne_morale pm on pm.idpersonne = p.idpersonne
FETCH NEXT FROM PersonneGroupeCursor INTO @id_personne_groupe
END
CLOSE PersonneGroupeCursor
DEALLOCATE PersonneGroupeCursor