none
Combinar una columna y separar sus campos por comas si el id es repetido RRS feed

  • Pregunta

  • Hola buenos dias, 

    Tengo una vista que me relaciona 3 tablas por el id la vista funciona bien, pero tengo un inconveniente en la tabla idClass, ya que un id puede tener 2 categorias como lo muestro en la imagen adjunta, esto hace que al consultar la vista me traiga dos veces ese id, una fila con toda la informacion mas categoria Asset y otra fila con la misma informacion pero cambia la categoria por Contabilidad.

    como pudo hacer para que estas dos categorias queden en la misma columna en la misma fila y separadas por coma o cualquier caracter.

    Actual>Deseado>

    muchas gracias


    Felipe Hurtado Developer

    viernes, 4 de noviembre de 2016 16:36

Respuestas

  • Felipe Hurtado,

    No veo que hayas seguido la forma que te propuse, intenta con lo siguiente:

    SELECT
       STUFF((SELECT ', ' + idClass FROM VIEW_CREATION_DATE WHERE (v.ID = ID) FOR XML PATH('')), 1, 1, ''),
       v.Col1,
       v.Col2
    FROM	   
        VIEW_CREATION_DATE v
    GROUP BY
        v.ID,
        v.Col1,
        v.Col2;

    Para establecer un nombre a la columna de la lista de selección basta con agregar un alias con la instrucción AS.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    viernes, 4 de noviembre de 2016 21:26

Todas las respuestas

  • Felipe Hurtado,

    Podrías hacer los siguiente:

    SELECT
        t1.id,
        MAX(t1.Col2), /*Otras columnas*/
        STUFF((SELECT ',' + ColCategoria FROM T1 WHERE (id = t1.id) FOR XML PATH(''), TYPE)
    	   .value('.[1]', 'nvarchar(4000)'), 1, 1, '') AS 'Categoria'
    FROM
        T1 t1
    GROUP BY
        t1.id


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 4 de noviembre de 2016 16:48
  • Hola gracoias por tu aporte pero me puedes explicar que es t1 y T1 no me quedo claro

    Felipe Hurtado Developer

    viernes, 4 de noviembre de 2016 16:58
  • Felipe Hurtado,

    Es sólo un acercamiento dado que no dejas indicado las tablas que intervienen en tu consulta, la parte que interesa es el uso de la función STUFF() para contener en un único valor las instancias de fila que contenga la columna.

    En todo caso, ¿podrías postear la consulta que realizas para obtener el resultado que etiquetas como 'ACTUAL'? A partir de ese código puedo escribir la consulta para que obtengas el resultado 'DESEADO'.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 4 de noviembre de 2016 17:24

  • Esta es la Vista que estoy consultando, tiene por nombre VIEW_CREATION_DATE la idea es poder realizar una consulta entre dos fechas esa consulta es la siguiente 

    SELECT [id],[name], [value]  FROM VIEW_CREATION_DATE WHERE value >= '10/4/2016' AND value <=  '10/5/2016'  ORDER BY value OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY 
    Todo lo hace bien lo unico es que necesito concatenar los valores de la columna idClass cuando la columna id sea igual. Y dejar estos valores en una misma celda separados por coma ejemplo la fila 6 de la imagen que envie

    Felipe Hurtado Developer




    viernes, 4 de noviembre de 2016 19:13
  • Bueno amigo ya me funciono pero solo me muestra una columna y sin titulo 

    como puedo mostrar las demas columnas de la tabla y esta ultima concatenada


    Felipe Hurtado Developer

    viernes, 4 de noviembre de 2016 20:32
  • Felipe Hurtado,

    No veo que hayas seguido la forma que te propuse, intenta con lo siguiente:

    SELECT
       STUFF((SELECT ', ' + idClass FROM VIEW_CREATION_DATE WHERE (v.ID = ID) FOR XML PATH('')), 1, 1, ''),
       v.Col1,
       v.Col2
    FROM	   
        VIEW_CREATION_DATE v
    GROUP BY
        v.ID,
        v.Col1,
        v.Col2;

    Para establecer un nombre a la columna de la lista de selección basta con agregar un alias con la instrucción AS.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    viernes, 4 de noviembre de 2016 21:26