سؤال

هل هناك طريقة لتمرير قيمة إلى استعلام جدول مشتق؟

في الجدول المشتق أريد الإشارة إلى قيمة ([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]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top