sql-server - 将值传递给派生表

标签 sql-server tsql derived-table

有没有办法将值传递给派生表查询?

在派生表中,我想从外部查询中引用一个值 ([docSVsys].[sID])

我得到一个错误:

Msg 4104, Level 16, State 1, Line 7 The multi-part identifier "docSVsys.sID" could not be bound.

是的,我知道这个查询可以简化为无循环。
有一个必须循环并尝试将其转换为如此设置的游标。

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 APPLY 而不是 JOIN 来做您想做的事情:

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] 

关于sql-server - 将值传递给派生表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11677527/

相关文章:

mysql - 查找Mysql中哪个条目出现次数最多

sql - 需要sql查询中的Range计数

php - 在 JOIN 语句中使用派生表

SQL View 与派生表

c# - 未抛出 OptimisticConcurrencyException : Possible reason: UpdateCommand

sql-server - 有没有办法在字符串的开头放置一个不可见的字符来更改其排序顺序?

sql - 使用 Union 和 string_split() 时子查询返回超过 1 个值

sql-server - SQL 服务器 : query for DENSE_RANK() grouped by a column?

sql-server - 应用程序服务器上需要 SET IDENTITY_INSERT ON/OFF,但 ALTER 权限似乎很危险。建议?

sql - 将存储过程的结果插入临时表