在SQL Server中查找相关性

在SQL Server中查找相关性,sql,sql-server-2008,Sql,Sql Server 2008,我只是想知道是否可以完全在SQLServer中完成以下操作 我有一个表,有3列-句子ID PK,任意长度的句子字符串,这些是在句子中发现的2或3个单词模式 我需要找出所有不同模式之间的相关性 如果我在外部使用python和ODBC,我需要完成以下步骤 对于每个不同的模式 获得模式的计数 找到所有具有该模式的句子ID 获取上述句子ID中出现的所有模式的计数 在步骤3中,将当前模式及其计数作为列追加到表中。 继续将上表作为行追加到结果表 接下来,让我假设模式遵循类似表达式的形式。而且,你只想计算一个

我只是想知道是否可以完全在SQLServer中完成以下操作

我有一个表,有3列-句子ID PK,任意长度的句子字符串,这些是在句子中发现的2或3个单词模式

我需要找出所有不同模式之间的相关性

如果我在外部使用python和ODBC,我需要完成以下步骤

对于每个不同的模式

获得模式的计数 找到所有具有该模式的句子ID 获取上述句子ID中出现的所有模式的计数 在步骤3中,将当前模式及其计数作为列追加到表中。 继续将上表作为行追加到结果表
接下来,让我假设模式遵循类似表达式的形式。而且,你只想计算一个句子的模式一次

如果是这样,您可以执行以下操作。获取所有句子和模式之间的匹配:

with sp as (
       select s.sentenceID, p.pattern, count(*) over (partition by p.pattern) as NumSentences
       from Sentences s join
            Patterns p
            on s.sentence like p.pattern
     )
select sp1.pattern, sp2.pattern,
       sp1.pattern as Pattern1Count, sp2.pattern as Pattern2Count,
       count(*) as BothCount
from sp sp1 join
     sp sp2
     on sp1.pattern < sp2.pattern    -- <= if you want counts for a single pattern
group by sp1.pattern, sp2.pattern
您没有明确说明您想要什么样的输出,但这应该足够了


因此,通过一些合理的假设,您可以在SQL中执行此操作。

最有可能在SQL中执行此操作,因为如果找不到基于集合的方法,您甚至可以回退到使用更多带游标的过程联邦代码。但在步骤4中,不清楚如何构造多个模式。您是否将重复列非规范化,或者是否存储在单独的一对多表中,等等。模式是如何表示的?你能举一些例子吗?你肯定可以用光标来做,需要一些示例数据和结果,看看是否有一种基于集合的方法。