Como hacer una cadena con un solo registro

hola buen día:

estoy tratando de formar una cadena de caracteres con los daos que están en la columna de observaciones, tengo este código para hacerlo

DECLARE @Temas VARCHAR(max)
SET @Temas = ''
SELECT @Temas = @Temas + ' -- ' + observaciones from dbo.viewresultados
where observaciones <> ''
SELECT @Temas

hasta aquí esta bien, pero cuando lo quiero integrar al procedimiento almacenado me envía la información a todos los empleados y no de un empleado al que le corresponde dicha información me puedes ayudar.

Gracias por el tiempo prestado

[email protected]

1 respuesta

Respuesta
1

Bueno así como me pones el SQL te digo que te traerá todo los registros (1 o muchos) que sus Observaciones no sean nulos o vacíos.

Si tu deseas que sea un empleado especifico, deberías agregar el campo del Id del Empleado al Where para especificar que aparte de ser las Observaciones <> '' también sea el Id del Empleado X

hola agradezco mucho tu respuesta.

Ya lo realice y si en efecto el resultado es lo que esperaba. ahora bien, tengo un procedimiento almacenado y necesito colocar dentro de este esta misma estructura ya la ubique no marca ningún error, pero las observaciones en un solo registro lo da en todos los empleados aunque coloque el idempleado.

aquí esta el procedimiento almacenado:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[TCRSPDetalleResultadoGetConcentradoRH]
@fecha_inf DATETIME,
@fecha_sup DATETIME,
@clv_empresa BIGINT,
@clv_areaBIGINT,
@clv_puestoBIGINT,
@clv_empleado BIGINT,
@clv_tiponomina BIGINT
AS
BEGIN
DECLARE @Temas VARCHAR(max)
SET @Temas = ''
SELECT @Temas = @Temas + ' -- ' + observaciones
from dbo.viewresultados
where (clv_empleado = 1 and fecha between @fecha_inf AND @fecha_sup
AND observaciones <> '')
/**/
SELECT *
INTO #tblHTN
FROM viewHorasTurnoNocturno
WHERE fecha BETWEEN @fecha_inf AND @fecha_sup
SELECT *
INTO #tblTE
FROM viewTiempoExtraTotalMin
WHERE fecha_resultado BETWEEN @fecha_inf AND @fecha_sup
SELECT *
INTO #tblHPD
FROM viewHorasPrimaDominical
WHERE fecha BETWEEN @fecha_inf AND @fecha_sup
SELECT *
INTO #tblHDL
FROM viewHorasDescansoLaborado
WHERE fecha BETWEEN @fecha_inf AND @fecha_sup
SELECT *
INTO #tblHFL
FROM viewHorasFestivoLaborado
WHERE fecha BETWEEN @fecha_inf AND @fecha_sup
SELECT DISTINCT a.clv_empleado,no_nomina,nombre_completo,nombre_completoxapellido,
clv_empresa,razon_social,
clv_puesto,puesto,
clv_area,area,
clv_tiponomina,tipo_nomina,
clv_secuencia,secuencia,
(SELECT COUNT(clv_resultado) FROM tblResultados
WHERE clv_empleado = a.clv_empleado
AND clv_tiporesultado not in (2,4)
AND fecha BETWEEN @fecha_inf AND @fecha_sup) as dias_laborados,
(SELECT COUNT(clv_resultado) FROM tblResultados
WHERE clv_empleado = a.clv_empleado
AND clv_tiporesultado in (2)
AND fecha BETWEEN @fecha_inf AND @fecha_sup) as faltas,
(SELECT COUNT(clv_resultado) FROM viewResultados
WHERE clv_empleado = a.clv_empleado
AND clv_tiporesultado in (4)
AND justificante like 'P003C_DI VACACIONES DISFRUTADAS'
AND fecha BETWEEN @fecha_inf AND @fecha_sup) as vacaciones,
(SELECT COUNT(clv_resultado) FROM viewResultados
WHERE clv_empleado = a.clv_empleado
AND clv_tiporesultado in (4)
AND justificante like '%INCA%'
AND fecha BETWEEN @fecha_inf AND @fecha_sup) as incapacidades,
SUM(n.total_min) as turno_nocturno,
CASE WHEN ISNULL(CAST(SUM(e.total_minutos) as integer),0) / 60 <= 9 THEN
SUM(e.total_minutos)
else
540
END AS extra_doble,
CASE WHEN ISNULL(CAST(SUM(e.total_minutos) as integer),0) / 60 > 9 THEN
SUM(e.total_minutos) - 540
END AS extra_triple,
SUM(d.total_min) as prima_dominical,
SUM(dl.total_min) as descanso_laborado,
SUM(fl.total_min) as festivo_laborado,
(SELECT substring(observaciones,1,2) FROM viewResultados
WHERE clv_empleado = a.clv_empleado
AND clv_tiporesultado in (1)
AND clv_justificante in (25)
AND fecha BETWEEN @fecha_inf AND @fecha_sup) as tmpextperant,
(SELECT count(justificante) FROM viewResultados
WHERE clv_empleado = a.clv_empleado
AND clv_tiporesultado in (4)
AND (justificante like 'P062C_CI%' OR justificante like 'P062C_IM%')
AND fecha BETWEEN @fecha_inf AND @fecha_sup) as productividad,
(SELECT @Temas) as observaciones,
@fecha_inf as fecha_inf,
@fecha_sup as fecha_sup
FROM viewResultados a
LEFT OUTER JOIN #tblHTN n
ON a.clv_empleado = n.clv_empleado
AND CAST(FLOOR(CAST(a.fecha AS FLOAT)) AS DATETIME) = n.fecha
LEFT OUTER JOIN #tblTE e
ON a.clv_empleado = e.clv_empleado
AND CAST(FLOOR(CAST(a.fecha AS FLOAT)) AS DATETIME) = e.fecha_resultado
LEFT OUTER JOIN #tblHPD d
ON a.clv_empleado = d.clv_empleado
AND CAST(FLOOR(CAST(a.fecha AS FLOAT)) AS DATETIME) = d.fecha
LEFT OUTER JOIN #tblHDL dl
ON a.clv_empleado = dl.clv_empleado
AND CAST(FLOOR(CAST(a.fecha AS FLOAT)) AS DATETIME) = dl.fecha
LEFT OUTER JOIN #tblHFL fl
ON a.clv_empleado = fl.clv_empleado
AND CAST(FLOOR(CAST(a.fecha AS FLOAT)) AS DATETIME) = fl.fecha
WHERE CAST(FLOOR(CAST(a.fecha AS FLOAT)) AS DATETIME) BETWEEN @fecha_inf AND @fecha_sup
AND (((@clv_empresa IS NULL) AND (clv_empresa <> -1))
OR (clv_empresa = @clv_empresa))
AND (((@clv_area IS NULL) AND (clv_area <> -1))
OR (clv_area = @clv_area))
AND (((@clv_puesto IS NULL) AND (clv_puesto <> -1))
OR (clv_puesto = @clv_puesto))
AND (((@clv_empleado IS NULL) AND (a.clv_empleado <> -1))
OR (a.clv_empleado = @clv_empleado))
AND (((@clv_tiponomina IS NULL) AND (clv_tiponomina <> -1))
OR (clv_tiponomina = @clv_tiponomina))
GROUP BY a.clv_empleado,no_nomina,nombre_completo,nombre_completoxapellido,
clv_empresa,razon_social,clv_puesto,puesto,clv_area,area,
clv_tiponomina,tipo_nomina,clv_secuencia,secuencia
DROP TABLE #tblHTN
DROP TABLE #tblTE
DROP TABLE #tblHPD
DROP TABLE #tblHDL
DROP TABLE #tblHFL
END

espero me puedas ayudar con esta parte.

Muchísimas gracias

<div id="wrc-float-icon" style="z-index: 2147483646; left: 15px; top: 15px; width: 42px; height: 42px; background-image: url('safari-extension://com.avast.wrc-6H4HRTU5E3/66bdbb5b/images/float/green-1.png'); position: fixed; display: none;"> </div>

Enfoquemosnos en el primer Select por que lo demás es confusión, sacale los paréntesis al Where y prueba.

ya realice pruebas como me indicas y el resultado es el mismo

todos los empleados aparecen con la misma informacion

<div id="wrc-float-icon" style="z-index: 2147483646; left: 15px; top: 15px; width: 42px; height: 42px; background-image: url('safari-extension://com.avast.wrc-6H4HRTU5E3/f2588dcf/images/float/green-1.png'); position: fixed; display: none;"> </div>

Ponme 5 registros de tu tabla que intentas hacer el select.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas