Para encontrar el porcentaje de NoOfComments
Frecuentes
Visto 664 equipos
0
Id Answer NoOfComments
18 1 2
19 2 0
20 3 0
21 4 0
22 5 1
Los datos proporcionados anteriormente son el resultado obtenido del siguiente 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
Ahora necesito encontrar el valor porcentual de cada respuesta según el valor en el campo NoOfComments. Puedo dar algo más de información. 1.datos en la tabla HRM_blogquestion de la siguiente manera.
Id Question CreatedDate CreatedBy
8 tttt 2012-07-03 17:36:47.513 1
2.datos en la tabla HRM_Blogrespuesta de la siguiente manera
Id QuestionId Answer
18 8 1
19 8 2
20 8 3
21 8 4
22 8 5
3.datos en la tabla HRM_Blogvote de la siguiente manera
Id QuestionId AnswerId EmployeeId
19 8 18 1
23 8 22 24
24 8 18 25
A partir de estos datos de la tabla, escribo el SP anterior y ahora necesito encontrar el porcentaje de respuestas votadas.
Por favor ayúdame a solucionar esto.
2 Respuestas
1
En lugar de crear esta tabla @Results
, puede convertir su consulta existente en una expresión de tabla común, y consulta eso en su lugar. La consulta final es la que desea:
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
Resultado:
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
Entonces, su proceso sería:
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
Respondido 04 Jul 12, 11:07
aquí NoOfComments no es un campo en la tabla. Se muestra solo en la salida del SP anterior. ,(SELECT COUNT(*) FROM HRM_BlogVote WHERE HRM_BlogVote.AnswerId =[HRM_BlogAnswer] .[Id]) AS NoOfComments es la consulta para mostrar el campo NoOfComments en la salida - Ramdas
@Ramdas: a eso me refería en mi primer párrafo, donde dije que convertiría su consulta existente en un CTE. Actualicé mi respuesta (al final) con lo que creo que sería su proceso almacenado. - damien_el_incrédulo
Estimado Damián, Muchas gracias por tu ayuda. Ahora cumplo con mi requerimiento. Muchísimas gracias. - Ramdas
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
Respondido 09 Jul 12, 13:07
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas sql-server-2008 sql-server-2008-r2 or haz tu propia pregunta.
¿Es el resultado (de su muestra) 66%,0%,0%,0%,33% (para cada una de las 5 filas)? De no ser así, ¿qué porcentaje se espera calcular? ¿Siempre habrá solo 5 filas? Si no, ¿es siempre en toda la tabla o hay alguna columna adicional que identifique las filas relacionadas? - Damien_The_Unbeliever
El resultado es el mismo que das. pero no siempre son 5 filas - Ramdas