Пройти значение для производного стола
-
12-12-2019 - |
Вопрос
Есть ли способ пройти значение на полученную таблицу?
В полученной таблице я хочу ссылаться на значение ([docSVsys].[sID])
из внешнего запроса.
Я получаю ошибку:
MSG 4104, Уровень 16, Состояние 1, Линия 7 Идентификатор многоуровневой «DOCSVSYS.SID» не может быть связан.
Да, я знаю, что этот запрос может быть упрощен без петли.
Есть курсор, который должен петь и пытаться преобразовать его настолько набор..select top 10 [docSVsys].[sID], [sI].[count] from docSVsys join ( select count(*) as [count] from docSVenum1 as [sIt] where [sIt].[sID] = [docSVsys].[sID] ) as [sI] on '1' = '1' order by [docSVsys].[sID]
Крест, казалось, делал трюк. И это ровно 1/3 быстрее, чем версия курсора. Настоящий запрос с использованием креста применить ниже.
.SELECT [sO].[sID], [sI].[max], [sI].[avg], [sI].[stdev] FROM docSVsys as [sO] with (nolock) cross apply ( select [sO].[sID], max(list.match) as 'max', avg(list.match) as 'avg', stdev(list.match) as 'stdev' from ( select #SampleSet.[sID], [match] = 200 * count(*) / CAST ( #SampleSetSummary.[count] + [sO].[textUniqueWordCount] as numeric(8,0) ) from #SampleSet with (nolock) join FTSindexWordOnce as [match] with (nolock) -- this is current @sID on match.wordID = #SampleSet.wordID and [match].[sID] = [sO].[sID] join #SampleSetSummary with (nolock) -- to get the word count from the sample set on #SampleSetSummary.[sID] = #SampleSet.[sID] group by #SampleSet.[sID], #SampleSetSummary.[count] ) as list having max(list.match) > 60 ) as [sI] where [textUniqueWordCount] is not null and [textUniqueWordCount] > 4 and [sO].[sID] <= 10686 order by [sO].[sID]
Решение
Вы можете делать то, что вы хотите с крестом, а не присоединиться:
select top 10 [docSVsys].[sID], [sI].[count]
from docSVsys
cross apply
(
select count(*) as [count]
from docSVenum1 as [sIt]
where [sIt].[sID] = [docSVsys].[sID]
) as [sI]
order by [docSVsys].[sID]
. Другие советы
Добавьте идентификатор на производную таблицу и присоединяйтесь к этому:
select top 10 [docSVsys].[sID], [sI].[count]
from docSVsys
join
(
select [sIt].[sID], count(*) as [count]
from docSVenum1 as [sIt]
group by [sIt].[sID]
) as [sI]
on [sI].[sID] = [docSVsys].[sID]
order by [docSVsys].[sID]
.