2013-10-08 58 views
-1

我有两个表的关键字,并张贴SUM函数与加盟

关键字表看起来像

 keyword weight 
     1   0.3 
     2   0.5 
     3   0.4 

例如

和后表

  post 
     i am beautiful 
     1, 2, 3 
     1 + 3 = 4 

,如果我想总结来自邮寄表的重量

这意味着

我想要得到的结果作为

 post  total 
    1, 2, 3  1.2 
    1 + 3 = 4 0.7 

这样

我应该用联接子句?

create procedure RankingPost8 
(@concept_name nvarchar(50)) 
AS 
declare @k1 nvarchar(200) 
select @k1 = keyword from keyword where concept_id = 
(select Concept_ID from concept where @concept_name = Concept_name) 
Select @K1 = coalesce(@k1 +' ','') + keyword from keyword 
begin 
select id as Post_ID, post as Txt from Post 
    where freetext (post, @k1) 

end 
+0

为什么后'1 + 3 = 4'的值为0.3而不是0.7? –

+2

这是sql server又是对不对? mysql和sql server是两个不同的rdbms。 –

+0

哦对不起XD应该是0.7 –

回答

0

一个可能的解决方案是使用游标。

尝试这样:

UPDATE POST 
SET TOTAL = 0 

DECLARE @keyword INT, 
     @weight NUMERIC(4, 2) 
DECLARE CURS CURSOR FAST_FORWARD READ_ONLY FOR 
    SELECT * 
    FROM KEYWORD 

OPEN CURS 

FETCH NEXT FROM CURS INTO @keyword, @weight 

WHILE @@FETCH_STATUS = 0 
    BEGIN 
     UPDATE POST 
     SET TOTAL = TOTAL + @weight 
     WHERE CHARINDEX(CAST(@keyword AS VARCHAR(4)), POST) > 0 

     FETCH NEXT FROM CURS INTO @keyword, @weight 
    END 

CLOSE CURS 

DEALLOCATE CURS 

SELECT POST, 
     TOTAL 
FROM POST 
WHERE TOTAL > 0 

工作示例可以在SQL Fiddle找到。

在我的例子中,我在Post表中添加了一个列来保存最终值。如果你想在不同的表格中或者只是在输出中不改变原始表格,请告诉我。

+0

啊我忘了说使用Sum()函数来获得总重量.. –

+0

为什么你需要使用SUM ()函数具体是什么? – Gidil

+0

我的任务需要一个排名存储过程 返回排名表包括Post_ID,Post和Rank 我有三个表,Concept,keywords和Post –

0

你为什么不尝试这样的事情?

SELECT post, sum(weight) 
FROM Post 
INNER JOIN Keyword ON post LIKE '%'+ Convert(varchar,keyword) + '%' 
GROUP BY post 

试一下SQL Fiddle

我留给你添加一个where条件的参数:)

希望你喜欢它。