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

したがって、procは次のようになります。

 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 に答える