2014-08-27 4 views
0

У меня есть две таблицы, таблица частот слов и таблица весов слов. Мне нужно написать скрипт или скрипты t-sql для вычисления взвешенной оценки таблицы частот слов на основе слов и весов, указанных в таблице весов слов.Умножение общих значений между 2 таблицами

Например: частоты таблицы Слово

Word Frequency 
,,,,,,,,,,,,,,,, 
Fat  3 
Ugly  2 
dumb  2 
stupid  3 

веса Таблица слов

Word Weight 
,,,,,,,,,,,,,, 
Ugly  5 
stupid 7 

Взвешенная оценка от этих двух таблиц будет работать, чтобы быть (5x2) + (7x3) = 31 Затем мне нужно распечатать результаты, если более 30 «Alert! Score over 30» или если до 30, то «Normal, score under 30».

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

Сценарии должны быть в состоянии разрешить изменение таблиц, поэтому я предполагаю, что ему просто нужно искать общие значения между ними, а затем присоединяться к столбцам.

Я мог бы уйти, но я рассчитываю соединение между двумя таблицами на основе где w.word = f.word ??

Я искал решение весь день и действительно ничего не получил. Любая помощь будет оценена!

ответ

4

Это должно быть

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

Если одна таблица содержит все слова, то вы могли бы использовать левое соединение как было предложено, но если нет, то полное внешнее соединение будет работать.

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 
0
select case when SUM(cast(fr as numeric)* cast (weight as numeric)) >30 then 'ABove 30' 
else 'below 30' end from table1 inner join 
table2 on table1.word=table2.word 
0

Просто чтобы доказать @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 
Смежные вопросы