10/08/2012, 10:47
|
| | Fecha de Ingreso: septiembre-2010
Mensajes: 91
Antigüedad: 14 años, 2 meses Puntos: 9 | |
Respuesta: Reporte para agenda diaria Gracias a ambos por sus ideas, gracias a ambos logré hacer que se generara la agenda para uno solo, pero tengo problemas para cuando tengo mas de un registro para una hora especifica, por ejemplo si 2 usuarios tienen una tarea o cita para la misma hora entonces existe mas de un registro y genera un error: Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
pongo aca el codigo para que lo vean a ver si me dan una idea de como hacer para esos casos, como les digo si mando el codigo de un usuario especifico todo bien, pero si se le manda 0 (osea todos) ahi da error, de antemano muchas gracias por su ayuda.
Código:
ALTER PROCEDURE [dbo].[spagendadiaria]
-- Add the parameters for the stored procedure here
@hi as datetime = getDate,
@hf as datetime = getDate,
@formato varchar(2) = '00',
@cant int = 0,
@medico int = 0
AS
BEGIN
if not exists (select * from sysobjects where name='#temp' and xtype='U')
begin
create table #temp(
hora varchar(8),
paciente varchar(100),
medico varchar(200)
)
end
declare @hora varchar(8)
declare @paciente varchar(100)
declare @nombreMedico varchar (200)
delete from #temp
while datepart(hour,@hi) <= datepart(hour,@hf)
begin
set @hora = (select convert(varchar(3),datepart(hour,@hi)) + ':' + RIGHT( @formato + cast(datepart(minute,@hi) AS varchar), 2))
set @paciente = (SELECT dbo.Pacientes.nombre + ' ' + dbo.Pacientes.apellido FROM dbo.Pacientes INNER JOIN dbo.citas ON dbo.Pacientes.codigo = dbo.citas.tarea INNER JOIN dbo.tipoCita ON dbo.citas.tipoCita = dbo.tipoCita.codigo INNER JOIN dbo.usuarios ON dbo.citas.usuario = dbo.usuarios.codigo INNER JOIN dbo.tiposExamenes ON dbo.citas.examen = dbo.tiposExamenes.codigo AND dbo.usuarios.nivel = 3 AND dbo.citas.tipoCita IN (2, 3, 4, 5) where dbo.citas.fechaInicio = @hi and (dbo.citas.usuario = @medico or @medico=0))
set @nombreMedico = (SELECT 'Dr. ' + dbo.usuarios.apellido FROM dbo.Pacientes INNER JOIN dbo.citas ON dbo.Pacientes.codigo = dbo.citas.tarea INNER JOIN dbo.tipoCita ON dbo.citas.tipoCita = dbo.tipoCita.codigo INNER JOIN dbo.usuarios ON dbo.citas.usuario = dbo.usuarios.codigo INNER JOIN dbo.tiposExamenes ON dbo.citas.examen = dbo.tiposExamenes.codigo AND dbo.usuarios.nivel = 3 AND dbo.citas.tipoCita IN (2, 3, 4, 5) where dbo.citas.fechaInicio = @hi and (dbo.citas.usuario = @medico or @medico=0))
insert into #temp values(@hora, @paciente, @nombreMedico)
set @hi = dateadd(minute,30,@hi)
end
select * from #temp
END
|