Sql 将两个表之间的公共值相乘

Sql 将两个表之间的公共值相乘,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两个表格,一个单词频率表和一个单词权重表。 我需要编写一个或多个t-sql脚本,根据单词权重表中给出的单词和权重计算单词频率表的加权分数 例如: 词频表 Word Frequency ,,,,,,,,,,,,,,,, Fat 3 Ugly 2 dumb 2 stupid 3 字重表 Word Weight ,,,,,,,,,,,,,, Ugly 5 stupid 7 这两个表的加权分数为(5x2)+(7x3)=31

我有两个表格,一个单词频率表和一个单词权重表。 我需要编写一个或多个t-sql脚本,根据单词权重表中给出的单词和权重计算单词频率表的加权分数

例如: 词频表

Word   Frequency
,,,,,,,,,,,,,,,,
Fat        3
Ugly       2
dumb       2
stupid     3
字重表

Word    Weight
,,,,,,,,,,,,,,
Ugly      5
stupid    7
这两个表的加权分数为(5x2)+(7x3)=31 然后我需要打印结果,如果超过30“警报!评分超过30”,或者如果低于30,则为“正常,评分低于30”

我可以在计算分数后创建打印脚本,但我不太确定如何实现

脚本需要能够允许更改表,所以我猜它只需要查找它们之间的公共值,然后连接列

我可能有点不对劲,但我正在根据w.word=f.word的位置计算两个表之间的连接

我整个下午都在寻找解决办法,但真的什么都没有得到。任何帮助都将不胜感激

应该是

select sum (w.Weight * f.Frequency) from WeightTable w
join FreqTable f  on f.Word = w.Word
应该是

select sum (w.Weight * f.Frequency) from WeightTable w
join FreqTable f  on f.Word = w.Word

如果一个表包含所有单词,那么您可以按照建议使用左连接,但如果不是,则可以使用完整的外部连接

SELECT 
    COALESCE(t1.word, t2.word) AS word
    , COALESCE(t1.frequency, 1) AS frequency
    , COALESCE(t2.weight, 1) AS weight
    , COALESCE(t1.frequency, 1) * COALESCE(t2.weight, 1) AS score
    , CASE WHEN COALESCE(t1.frequency, 1) * COALESCE(t2.frequency, 1) > 30 
                THEN 'Alert! Score over 30'
                ELSE 'Normal, score under 30' AS message END
FROM word_frequency t1
FULL OUTER JOIN word_weight t2
ON t1.word = t2.word

如果一个表包含所有单词,那么您可以按照建议使用左连接,但如果不是,则可以使用完整的外部连接

SELECT 
    COALESCE(t1.word, t2.word) AS word
    , COALESCE(t1.frequency, 1) AS frequency
    , COALESCE(t2.weight, 1) AS weight
    , COALESCE(t1.frequency, 1) * COALESCE(t2.weight, 1) AS score
    , CASE WHEN COALESCE(t1.frequency, 1) * COALESCE(t2.frequency, 1) > 30 
                THEN 'Alert! Score over 30'
                ELSE 'Normal, score under 30' AS message END
FROM word_frequency t1
FULL OUTER JOIN word_weight t2
ON t1.word = t2.word

为了证明@wraith的答案,下面是代码:

declare @WordFreq table (Word varchar(max), Frequency int );
declare @WordWeight table (Word varchar(max), Weight int );

insert into @WordFreq( Word, Frequency ) values
  ( 'Fat', 3)
, ( 'Ugly', 2)
, ( 'dumb', 2)
, ( 'stupid', 3)

insert into @WordWeight( Word, Weight ) values
  ( 'Ugly', 5)
, ( 'stupid', 7)

select sum (w.Weight * f.Frequency)
  from @WordFreq f
join @WordWeight w on f.Word = w.Word
-----------------------
OUTPUT: 31

为了证明@wraith的答案,下面是代码:

declare @WordFreq table (Word varchar(max), Frequency int );
declare @WordWeight table (Word varchar(max), Weight int );

insert into @WordFreq( Word, Frequency ) values
  ( 'Fat', 3)
, ( 'Ugly', 2)
, ( 'dumb', 2)
, ( 'stupid', 3)

insert into @WordWeight( Word, Weight ) values
  ( 'Ugly', 5)
, ( 'stupid', 7)

select sum (w.Weight * f.Frequency)
  from @WordFreq f
join @WordWeight w on f.Word = w.Word
-----------------------
OUTPUT: 31