none
Como agrupo en un mismo registro la misma solicitud con sus diferentes estados RRS feed

  • Pregunta

  • 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

    

    martes, 6 de febrero de 2018 22:33

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

    miércoles, 7 de febrero de 2018 0:08

Todas las respuestas

  • La idea es poder tener:

    idSolicitud 33  con : 1, 11,12,17

    idSolicitud 34  con : 1,10

    ....

    martes, 6 de febrero de 2018 22:41
  • 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

    

    Aqui esta ...

    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
    martes, 6 de febrero de 2018 22:53
  • 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

    martes, 6 de febrero de 2018 22:54
  • 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

    miércoles, 7 de febrero de 2018 0:08
  • 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


    miércoles, 7 de febrero de 2018 13:14
  • Muchas Gracias... Son ustedes muy buenos.  Gracias por la ayudita.

    Miguel

    miércoles, 7 de febrero de 2018 14:30