none
desplegar el resultado en forma horizontal RRS feed

  • Pregunta

  • buenos días

    alguien me puede auxiliar por favor

    requiero mostrar datos en forma horizontal, ejemplo:

    así estan:

    ID   NUMERO

    1     10

    1     11

    1     16

    2     24

    2     30

    2     36

    ASÍ DEBEN DE DESPLEGARSE:

    ID   NUMERO

    1     101116

    2     243036

    GRACIAS!!

    lunes, 29 de abril de 2019 14:59

Respuestas

  • Hola Gilberto:

    DECLARE @VARTABLE TABLE (ID INT , NUMERO nvarchar(100), importe DECIMAL(10,2))
    INSERT INTO @VARTABLE (ID, NUMERO, importe)
    VALUES
    (1,'10',10.15),
    (1,'11',20.10),
    (1,'16',30.15),
    (2,'24',17.15),
    (2,'30',24.36),
    (2,'36',15.25);
    
    
    SELECT RESULT.ID, CONCAT(RESULT.INTERIOR,',',RESULT.IMPORTES) AS NUMERO FROM (
    SELECT ID,  
    STUFF(
    (
        SELECT ', '+NUMERO 
        FROM @VARTABLE V
    	WHERE V.ID =EXTERIOR.ID
    	
    	
        
         FOR XML PATH('')
    ), 1, 1, '') AS INTERIOR, 
    STUFF(
    (
        SELECT ', '+CAST( IMPORTE  AS NVARCHAR(15))
        FROM @VARTABLE V
    	WHERE V.ID =EXTERIOR.ID
    	
    	
        
         FOR XML PATH('')
    ), 1, 1, '') AS IMPORTES
    FROM @VARTABLE AS EXTERIOR
    GROUP BY ID
    ) AS RESULT
    Salida

    lunes, 29 de abril de 2019 20:14

Todas las respuestas

  • CONSIDERANDO QUE DESCONOZCO EL RESULTADO DE ID Y NUMERO
    lunes, 29 de abril de 2019 15:04
  • Hola Gilberto Santa R:

    Puedes utilizar stuff y for xml path

    DECLARE @VARTABLE TABLE (ID INT , NUMERO INT)
    INSERT INTO @VARTABLE (ID, NUMERO)
    VALUES
    (1,10),
    (1,11),
    (1,16),
    (2,24),
    (2,30),
    (2,36);
    
    
    
    	    SELECT ID,  STUFF(
    (
        SELECT ', '+CAST(NUMERO AS VARCHAR(10))
        FROM @VARTABLE V
    	WHERE V.ID =EXTERIOR.ID
    	
    	
        
         FOR XML PATH('')
    ), 1, 1, '') AS INTERIOR
    FROM @VARTABLE AS EXTERIOR
    GROUP BY ID
    Salida

    Stuff

    https://docs.microsoft.com/es-es/sql/t-sql/functions/stuff-transact-sql?view=sql-server-2017

    For Xml https://docs.microsoft.com/es-es/sql/relational-databases/xml/for-xml-sql-server?view=sql-server-2017

    • Propuesto como respuesta Carlos_Ruiz_M viernes, 3 de mayo de 2019 18:19
    lunes, 29 de abril de 2019 16:04
  • Y SI EL CAMPO 'NUMERO'  ES NVARCHAR?
    lunes, 29 de abril de 2019 17:06
  • Hola Gilberto Santa R:

    Es casi indiferente.

    DECLARE @VARTABLE TABLE (ID INT , NUMERO nvarchar(100))
    INSERT INTO @VARTABLE (ID, NUMERO)
    VALUES
    (1,'10'),
    (1,'11'),
    (1,'16'),
    (2,'24'),
    (2,'30'),
    (2,'36');
    
    
    
    SELECT ID,  STUFF(
    (
        SELECT ', '+NUMERO 
        FROM @VARTABLE V
    	WHERE V.ID =EXTERIOR.ID
    	
    	
        
         FOR XML PATH('')
    ), 1, 1, '') AS INTERIOR
    FROM @VARTABLE AS EXTERIOR
    GROUP BY ID

    • Propuesto como respuesta Carlos_Ruiz_M viernes, 3 de mayo de 2019 18:19
    lunes, 29 de abril de 2019 18:38
  • MUCHAS GRACIAS POR SU APOYO

    UNA ULTIMA DUDA DE ESTE TEMA:

    EN ESTE CASO EL 'NUMERO' VIENE SIENDO EL 'CODIGO DE PAGO', AHORA NECESITO ANTEPONER EL IMPORTE DEL 'NUMERO'.

    EJEMPLO:

    ID NUMERO    IMPORTE

    1 10,11,16,10.15.20,10.23.08

    2 24,30,36,45.20,80.35,89.23

    ES DECIR:

    EL ID 1 DEL NUMERO 10 TIENE UN IMPORTE DE 10.15

    EL ID 1 DEL NUMERO 11 TIENE UN IMPORTE DE 20.10

    EL ID 1 DEL NUMERO 16 TIENE UN IMPORTE DE 23.08

    Y

    EL ID 2 DEL NUMERO 24 TIENE UN IMPORTE DE 45.20

    EL ID 2 DEL NUMERO 30 TIENE UN IMPORTE DE  80.35

    EL ID 2 DEL NUMERO 36 TIENE UN IMPORTE DE 89.23

    DECLARE @VARTABLE TABLE (ID INT , NUMERO nvarchar(100),IMPORTE MONEY )
    INSERT INTO @VARTABLE (ID, NUMERO,IMPORTE)
    VALUES
    (1,'10',10.15),
    (1,'11',20.10),
    (1,'16',23.08),
    (2,'24',45.20),
    (2,'30',80.35),
    (2,'36',89.23);

    lunes, 29 de abril de 2019 19:32
  • Hola Gilberto:

    DECLARE @VARTABLE TABLE (ID INT , NUMERO nvarchar(100), importe DECIMAL(10,2))
    INSERT INTO @VARTABLE (ID, NUMERO, importe)
    VALUES
    (1,'10',10.15),
    (1,'11',20.10),
    (1,'16',30.15),
    (2,'24',17.15),
    (2,'30',24.36),
    (2,'36',15.25);
    
    
    SELECT RESULT.ID, CONCAT(RESULT.INTERIOR,',',RESULT.IMPORTES) AS NUMERO FROM (
    SELECT ID,  
    STUFF(
    (
        SELECT ', '+NUMERO 
        FROM @VARTABLE V
    	WHERE V.ID =EXTERIOR.ID
    	
    	
        
         FOR XML PATH('')
    ), 1, 1, '') AS INTERIOR, 
    STUFF(
    (
        SELECT ', '+CAST( IMPORTE  AS NVARCHAR(15))
        FROM @VARTABLE V
    	WHERE V.ID =EXTERIOR.ID
    	
    	
        
         FOR XML PATH('')
    ), 1, 1, '') AS IMPORTES
    FROM @VARTABLE AS EXTERIOR
    GROUP BY ID
    ) AS RESULT
    Salida

    lunes, 29 de abril de 2019 20:14
  • Excelente!!

    Muchas gracias!!

    nuevamente

    lunes, 29 de abril de 2019 21:29