Подзапрос SQL Server Update с формулой не совсем подходит - PullRequest
0 голосов
/ 03 мая 2018

У меня есть таблица (таблица1) имен и их частот

Name-----Frequency

Mike-------0.56

Fred-------0.30

Nancy------0.14

и декартово произведение (таблица2), в котором имена объединены в два столбца и третий столбец, в котором я хотел бы суммировать частоты из таблицы1 путем сопоставления имен в первых двух столбцах с таблицей 1.

Name1-------Name2------sum

Mike--------Fred     

Mike--------Nancy

Fred--------Nancy

Я хочу обновить столбец суммы таблицы 2, используя частоты в таблице 1, с помощью подзапроса в обновлении для совпадающих имен (или, как мне кажется, мне нужно это сделать). Если есть лучший способ, пожалуйста, дайте мне знать.

У меня есть:

UPDATE table2
SET sum = (SELECT dbo.table1.Frequency WHERE Name1 = dbo.table1.Name) +
          (SELECT dbo.table1.Frequency WHERE Name2 = dbo.table1.Name)
FROM table1

Я получаю таблицу, полную значений NULL вместо сумм частот. Я иду об этом правильным путем? Я совершенно не понимаю, как это сделать, и есть лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Ваш метод в порядке. Если все имена совпадают:

UPDATE t2
    SET sum = (SELECT f.frequency FROM dbo.table1.Frequency f WHERE t2.Name1 = f.Name) +
              (SELECT f.frequency FROM dbo.table1.Frequency f WHERE t2.Name2 = f.Name)
    FROM table2 t2;

Если они этого не делают, тогда используйте isnull() (или coalesce(), но isnull() более эффективно):

UPDATE t2
    SET sum = isnull( (SELECT f.frequency FROM dbo.table1.Frequency f WHERE t2.Name1 = f.Name), 0) +
              isnull( (SELECT f.frequency FROM dbo.table1.Frequency f WHERE t2.Name2 = f.Name), 0)
    FROM table2 t2;
0 голосов
/ 03 мая 2018

Попробуйте обновить из объединения, как это:

update a 
set a.sum=isnull(b.frequency,0)+isnull(c.frequency,0)
from  table2  a
left join table1 b  on a.name1=b.name 
left join table1 c  on a.name2=c.name 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...