0
Id  Answer  NoOfComments
18      1        2
19      2        0
20      3        0
21      4        0
22      5        1

上面给出的数据是从以下 StoredProcedure 获得的输出。

 ALTER PROCEDURE [dbo].[BlogAnswerByQuestionId]
(
    @QuestionId int
)
AS
BEGIN
    SELECT [HRM_BlogAnswer].[Id] as Id
          ,[HRM_BlogAnswer].[Answer]
          ,(SELECT COUNT(*) FROM HRM_BlogVote  WHERE HRM_BlogVote.AnswerId  =[HRM_BlogAnswer] .[Id]) AS NoOfComments

        FROM [HRM_BlogAnswer] 
    WHERE [HRM_BlogAnswer].[QuestionId] = @QuestionId


END

现在我需要根据 NoOfComments 字段中的值找到每个答案的百分比值。我可以提供更多信息。1.HRM_blogquestion表中的数据如下。

Id  Question    CreatedDate          CreatedBy
8   tttt    2012-07-03 17:36:47.513        1

2.HRM_Bloganswer表中的数据如下

Id  QuestionId  Answer
18  8             1
19  8             2
20  8             3
21  8             4
22  8             5

3.HRM_Blogvote表中的数据如下

Id  QuestionId  AnswerId    EmployeeId
19  8                18        1
23  8                22        24
24  8                18        25

从这些表格数据中我写了上面的 SP 现在我需要找到投票答案的百分比

请帮我解决这个问题。

4

2 回答 2

1

@Results您可以将现有查询转换为公用表表达式,然后进行查询,而不是创建此表。最终查询是您想要的查询:

declare @Results table (
    Id int not null,
    Answer int not null,
    NoOfComments int not null
)
insert into @Results (Id,Answer,NoOfComments) values
(18,      1,        2),
(19,      2,        0),
(20,      3,        0),
(21,      4,        0),
(22,      5,        1)

select *,((NoOfComments * 100.0) / SUM(NoOfComments) OVER (PARTITION BY (1))) as Pcnt
from @Results

结果:

Id          Answer      NoOfComments Pcnt
----------- ----------- ------------ ---------------------------------------
18          1           2            66.666666666666
19          2           0            0.000000000000
20          3           0            0.000000000000
21          4           0            0.000000000000
22          5           1            33.333333333333

所以,你的过程将是:

 ALTER PROCEDURE [dbo].[BlogAnswerByQuestionId]
(
    @QuestionId int
)
AS
BEGIN
    ;With Results as (
    SELECT [HRM_BlogAnswer].[Id] as Id
          ,[HRM_BlogAnswer].[Answer]
          ,(SELECT COUNT(*) FROM HRM_BlogVote  WHERE HRM_BlogVote.AnswerId  =[HRM_BlogAnswer] .[Id]) AS NoOfComments

        FROM [HRM_BlogAnswer] 
    WHERE [HRM_BlogAnswer].[QuestionId] = @QuestionId
    )
    select *,((NoOfComments * 100.0) / SUM(NoOfComments) OVER (PARTITION BY (1))) as Pcnt
    from Results

END
于 2012-07-04T10:08:07.853 回答
0
ALTER PROCEDURE [dbo].[BlogAnswerByQuestionId] 
(     
@QuestionId int 
) 
AS 
BEGIN    
WITH Results 
AS 
    (     
        SELECT [HRM_BlogAnswer].[Id] as Id           
              ,[HRM_BlogAnswer].[Answer]           
              ,(SELECT COUNT(*) FROM [HRM_BlogVote]  WHERE [HRM_BlogVote].[AnswerId]  =[HRM_BlogAnswer].[Id]) AS NoOfComments          
          FROM [HRM_BlogAnswer]      
        WHERE [HRM_BlogAnswer].[QuestionId] = @QuestionId     
    )     
        SELECT *,
        case when NoOfComments>0 then  ((NoOfComments * 100.0) / SUM(NoOfComments) OVER (PARTITION BY (1))) else 0 end as Percentage    
            FROM Results  
END 
于 2012-07-09T12:12:34.027 回答