2011-03-04 6 views
6

Aquí es lo que tengo hasta ahora el uso de dos variables en el procedimiento almacenado declaró:SQL Server procedimiento almacenado añadir dos valores declarados para el total

SET @QuestionPoints = (SELECT SUM(points) 
         FROM tb_responses 
         WHERE userid = @UserId 
           AND id = @ID) 
SET @EventPoints =(SELECT SUM(dbo.tb_events.points) 
        FROM dbo.tb_attendance 
          INNER JOIN dbo.tb_events 
          ON dbo.tb_attendance.eventid = dbo.tb_events.dbid 
        WHERE dbo.tb_attendance.userid = @UserID 
          AND dbo.tb_attendance.didattend = 'Y' 
          AND dbo.tb_events.id = @ID) 

¿Cómo puedo añadir @QuestionPoints y @EventPoints juntos para obtener el total ¿puntos? ¿Puedo simplemente agregarlos usando "+" y asignarlos a una tercera variable declarada o tener una declaración general?

Gracias,

James

+0

Un título más apropiado para este habría sido "dos declararon las variables "en lugar de valores. Gracias a todos los que respondieron tan rápido. – James

Respuesta

11

Si usted no necesita las dos variables componentes más, puede (re) utilizar una de las variables:

SET @QuestionPoints = ... 
SET @EventPoints = ... 
SET @QuestionPoints = @QuestionPoints + @EventPoints 

Tenga cuidado sin embargo al añadir SUM(), porque pueden ser NULL. 20 + null => null. Use ISNULL si es necesario, p.

SET @QuestionPoints = isnull(@QuestionPoints, 0) + isnull(@EventPoints, 0) 

Si aún las necesita, puede declarar una tercera.

DECLARE @TotalPoints float --- or numeric or whatever the type should be 
SET @TotalPoints = @QuestionPoints + @EventPoints 

Incluso se podría omitir las variables individuales

SET @QuestionPoints = (SELECT SUM(POINTS) FROM tb_Responses WHERE UserID = @UserId AND ID = @ID) 
         + 
         (SELECT SUM(dbo.tb_Events.Points) FROM dbo.tb_Attendance INNER JOIN dbo.tb_Events ON dbo.tb_Attendance.EventID = dbo.tb_Events.dbID WHERE dbo.tb_Attendance.UserID = @UserID AND dbo.tb_Attendance.DidAttend = 'Y' AND dbo.tb_Events.ID = @ID) 
+0

Gracias. Solo para saber, también sería posible usar otra variable (@TotalPoints) y agregar las dos primeras juntas? – James

+0

@James sí, esto es posible ya que @Richard ya lo ha mostrado en uno de sus ejemplos (@TotalPoints). –

+0

Todos los que respondieron respondieron mi pregunta, pero incluir la información sobre tratar con nulos es increíblemente útil. Tendré que lidiar con eso ya que los participantes pueden tener puntos de las preguntas respondidas pero no de la asistencia a los eventos (y viceversa). – James

1

Si necesita @QuestionPoints y @EventPoints para conservar sus valores actuales, entonces sí, se necesita una tercera variable:

DECLARE @totalPoints INT 
SET @totalPoints = @QuestionPoints + @EventPoints 

Si no necesita que retengan su mismo valor, puede sobrescribir uno de ellos:

SET @QuestionPoints = @QuestionPoints + @EventPoints

O, en las últimas versiones de SQL:

SET @QuestionPoints += @EventPoints

0

Usted puede hacer esto en una sola instrucción

Set @Total = (
       Select Sum(Z.points) 
       From (
         Select points 
         From tb_responses 
         Where userid = @UserId 
          And Id = @Id 
         Union All 
         Select E.points 
         From dbo.tb_attendance As A 
          Join dbo.tb_events As E 
           On E.dbid = A.eventid 
         Where A.userid = @UserId 
          And A.didattend = 'Y' 
          And E.Id = @ID 
         ) As Z 
       ) 
Cuestiones relacionadas