Столбец как подзапрос - PullRequest
1 голос
/ 07 мая 2019

Нужно иметь 3-й столбец, который будет суммировать все точки на 1-й столбец (слово), но который будет суммировать точки из всех слов, которые похожи на «% word%» каждой строки, например, слово «шеф»будет иметь пункты «шеф-повар» и «кухонный шеф-повар» и т. д.

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

Ответы [ 3 ]

2 голосов
/ 07 мая 2019

Вы можете проверить это. Однако присоединение к LIKE не очень эффективно.

;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
1 голос
/ 07 мая 2019

Если я правильно понимаю, я бы, вероятно, использовал correlated subquery для этого:

select distinct w.word, 
      (select sum(points) from words w2 where w2.word like '%' + w.word + '%') as points
from words w
0 голосов
/ 07 мая 2019

Коррелированный подзапрос внутри выбора может снизить производительность. Я бы порекомендовал использовать join или cross apply

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...