Sql 列作为子查询

Sql 列作为子查询,sql,sql-server,tsql,Sql,Sql Server,Tsql,需要有一个第三列,它将对每个第一列单词的所有分数进行求和,但它将对所有单词的分数进行求和,这些单词类似于每行的“%word%”,例如单词“chef”将有“chef”和“kitchen chef”等 SELECT word, SUM(points) as points FROM table group by word 你可以测试一下。然而,加入一个类似的组织并不十分有效 ;WITH Words AS( SELECT word ,sum(points) as points,

需要有一个第三列,它将对每个第一列单词的所有分数进行求和,但它将对所有单词的分数进行求和,这些单词类似于每行的“%word%”,例如单词“chef”将有“chef”和“kitchen chef”等

SELECT word, SUM(points) as points  
  FROM table
group by word

你可以测试一下。然而,加入一个类似的组织并不十分有效

;WITH Words AS(
    SELECT word ,sum(points) as points, 
    FROM table group by word
)

SELECT
    W.word,
    W.points,
    LikeWordPoints = W.points + ISNULL(SUM(LikeWord.points),0)
FROM
    Words W
    LEFT OUTER JOIN Words LikeWord ON LikeWord.word LIKE '%'+W.word+'%' AND LikeWord.word <> W.word
GROUP BY
    W.word,
    W.points

如果我理解正确,我可能会为此使用相关子查询:

select distinct w.word, 
      (select sum(points) from words w2 where w2.word like '%' + w.word + '%') as points
from words w

select中的相关子查询可能会降低性能。我建议使用“加入”或“交叉应用”

select distinct w.word, C.SumOfPoints as sumofpoints
from words w
CROSS APPLY (SELECT SUM(points) AS SumOfPoints from words w2 WHERE w2.word like '%' + 
w.word + '%') C

您能否共享一些示例数据以及您希望从该示例中获得的结果?这是针对MySQL还是SQL Server的?它们是两个非常不同的RDBMS。标题与问题有什么关系?你必须把它作为一个子查询作为课程作业吗?它是sql server,我试图得到这样的东西,当然它不起作用,选择word,sumpoints作为点,sumpoints表组中“%”+word+“%”之类的单词可能我的标题有误,但在我看来,必须有一个子查询才能产生结果。您假设该表作为字典工作,不能有重复的单词。我相信这是一个合理的假设,但如果不是这样的话,你会漏掉一些要点。我读它的时候,每个单词都被总结,并添加到其他类似单词的要点上。如果重复的单词具有相同的权重,那么类似于上述的查询将起作用。如果一个单词中的每个匹配项都是需要的,那么这不是正确的查询:/Thank感谢您的评论GasHere Hs Thank将使用它