تمرير القيمة إلى الجدول المشتق
-
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]
المحلول
يمكنك أن تفعل ما تريد باستخدام تطبيق CROSS بدلاً من الانضمام:
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]
لا تنتمي إلى StackOverflow