Principales respuestas
Como agrupo en un mismo registro la misma solicitud con sus diferentes estados

Pregunta
-
Respuestas
-
Hola:
Tambien puedes hacer un cursor tal que algo como esto:
DECLARE @PKEY INT; DECLARE @ANT INT=-1; DECLARE @ESTADOS INT; DECLARE @CADENA VARCHAR(MAX)=''; DECLARE MICURSOR CURSOR FOR SELECT IDSOLICITUD, ESTADOS FROM #SOLICITUD OPEN MICURSOR FETCH MICURSOR INTO @PKEY, @ESTADOS WHILE (@@FETCH_STATUS=0) BEGIN IF (@PKEY <>@ANT) BEGIN IF @CADENA<>'' SELECT @CADENA; SET @CADENA = 'IDSOLICITUD '+CAST(@PKEY AS VARCHAR)+': ' SET @ANT = @PKEY; END IF (@PKEY = @ANT OR @ANT = -1)BEGIN SET @CADENA = @CADENA + CAST (@ESTADOS AS VARCHAR) +' ' ; END SET @ANT = @PKEY; FETCH MICURSOR INTO @PKEY, @ESTADOS END CLOSE MICURSOR DEALLOCATE MICURSOR
Un saludo
- Propuesto como respuesta Pablo RubioModerator miércoles, 7 de febrero de 2018 16:01
- Marcado como respuesta Pablo RubioModerator lunes, 12 de febrero de 2018 15:52
Todas las respuestas
-
-
Cuento con los siguientes registros y quisiera poder tenerlos en un mismo renglon todas las solicitudes con sus diferentes estados.
idSolicitud Estados
33 1
33 11
33 12
33 17
34 1
34 10
35 1
35 14
35 17
Si necesitas ayuda sube tu avance de otro modo no puedo ayudarte , Suerte!
- Propuesto como respuesta Jorge TurradoMVP miércoles, 7 de febrero de 2018 13:21
-
Yo haría algo así
DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX); SET @columns = N''; SELECT @columns += N', ' + QUOTENAME(ac_alma) FROM (SELECT estados from tuTabla where idSolicitud=33) AS x; print STUFF(@columns, 1, 2, '')
estoy dando el valor por defecto idSolicitud, esa es una primera parte la otra parte seria en una variable tabla o tabla temporal, o subconsulta, cada idsolicitud para darle el valor que te muestro en la consulta anterior.
Saludos
- Propuesto como respuesta Pablo RubioModerator miércoles, 7 de febrero de 2018 16:00
-
Hola:
Tambien puedes hacer un cursor tal que algo como esto:
DECLARE @PKEY INT; DECLARE @ANT INT=-1; DECLARE @ESTADOS INT; DECLARE @CADENA VARCHAR(MAX)=''; DECLARE MICURSOR CURSOR FOR SELECT IDSOLICITUD, ESTADOS FROM #SOLICITUD OPEN MICURSOR FETCH MICURSOR INTO @PKEY, @ESTADOS WHILE (@@FETCH_STATUS=0) BEGIN IF (@PKEY <>@ANT) BEGIN IF @CADENA<>'' SELECT @CADENA; SET @CADENA = 'IDSOLICITUD '+CAST(@PKEY AS VARCHAR)+': ' SET @ANT = @PKEY; END IF (@PKEY = @ANT OR @ANT = -1)BEGIN SET @CADENA = @CADENA + CAST (@ESTADOS AS VARCHAR) +' ' ; END SET @ANT = @PKEY; FETCH MICURSOR INTO @PKEY, @ESTADOS END CLOSE MICURSOR DEALLOCATE MICURSOR
Un saludo
- Propuesto como respuesta Pablo RubioModerator miércoles, 7 de febrero de 2018 16:01
- Marcado como respuesta Pablo RubioModerator lunes, 12 de febrero de 2018 15:52
-
La forma comun de resolver este problema es usando la opcion FOR XML PATH aunque en nuevas versiones tambien se puede usar JSON y/o la nueva funcion de agregacion de cadena STRING_AGG.
select R.idSolicitud, stuff( ( select ',' + cast(Estados as varchar(25)) as [data()] from T as S where S.idSolicitud = R.idSolicitud order by S.Estados for xml path('') ), 1, 1, '') as Estados from ( select distinct T.idSolicitud from T ) as R;
AMB
Some guidelines for posting questions...
AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas- Editado HunchbackMVP miércoles, 7 de febrero de 2018 13:18
- Propuesto como respuesta Pablo RubioModerator miércoles, 7 de febrero de 2018 16:01
-