none
Group by RRS feed

  • Pregunta

  • Hola tengo el siguiente problema les cuento


    Tengo la siguiente consulta


    select a.c21 as manzana,LEFT(A.c22,6) as ubicacion,count(c22) as [contador]
    from CCCLIE1 a
    where c22 is not null and c44=''
    and c21 is not null
    group by c21,LEFT(A.c22,6) having count('') > 1
    order by c21



    hasta ahi todo bien !! pero lo que quiero llegar es mostrar el a.c22 sin el left

    quiero que quede algo asi

    select a.c21 as manzana,LEFT(A.c22,6) as ubicacion,count(c22) as [contador], A.c22 as SINLEFT
    from CCCLIE1 a
    where c22 is not null and c44=''
    and c21 is not null
    group by c21,LEFT(A.c22,6) having count('') > 1
    order by c21


    mostrar eso --> A.c22 as SINLEFT

    PERO EM DICE QUE NO ESTA EN LA lista de seleccion

    si me pudieran ayudar desde ya muchas gracias :)!
    .::**~ No Use for A NamE ~**::.
    lunes, 27 de julio de 2009 16:28

Respuestas

  • Hola.

    Agrupar y mostrar el detalle no se puede, por eso te decía que nos pasaras la especificación concreta. Una cosa que puedes hacer es utilizar una agrupación de tipo "with cube" que te muestre el agrupado y el detalle de cada subgrupo y luego tú, en la capa de presentación, ocultas aquellos registros que no necesitas. Y ojo con el having, que condiciona el resultado:

    select a.c21 as manzana,LEFT(A.c22,6) as ubicacion,count(c22) as [contador], A.c22 as SINLEFT
    from CCCLIE1 a
    where c22 is not null and c44=''
    and c21 is not null 
    group by c21,LEFT(A.c22,6), A.c22 having count('') > 1 
    with cube
    order by c21

    Otra cosa que podrías hacer es volver a cruzar con la misma tabla con una select por encima. Tampoco sé si te valdría, porque te saldrán duplicados, pero sería más o menos así:

    select C.c22, G.*
    from (select a.c21 as manzana,LEFT(A.c22,6) as ubicacion,count(c22) as [contador], A.c22 as SINLEFT
    from CCCLIE1 a
    where c22 is not null and c44=''
    and c21 is not null 
    group by c21,LEFT(A.c22,6) having count('') > 1  ) G inner join CCCLIE1 C on G.c21 = C.c21 and G.ubicacion = left(C.c22)
    order by G.c21

    Nos dices con lo que sea.

    Alberto López Grande.
    lunes, 27 de julio de 2009 18:36
    Moderador

Todas las respuestas

  • Hola.

    Donde no está es en la lista de agrupación, debes agrupar por ese campo para poder mostrarlo. Aquí pueden darse dos casos:
    - Que la agrupación sea la misma con el left y sin él:

    select a.c21 as manzana,LEFT(A.c22,6) as ubicacion,count(c22) as [contador], A.c22 as SINLEFT
    from CCCLIE1 a
    where c22 is not null and c44=''
    and c21 is not null 
    group by c21, A.c22 having count('') > 1 
    order by c21

    - Que sea diferente (que será lo más normal). En ese caso, si la incluyes en la agrupación, tendrás un resultado distinto, que no sé si te valdrá. 

    Si es el segundo caso y necesitas mostrarlo, pásanos la especificación concreta por si te pudiéramos ayudar.


    Alberto López Grande.
    lunes, 27 de julio de 2009 17:58
    Moderador
  • claro, segundo caso, ya que necesito agrupar bajo la condicion del LEFT(), entonces es que me agrupe por c21 y LEFT(A.c22,6)
     pero en pantalla quiero q me muestre el A.C22 sin left se entiende??

    Desde ya muchas gracias :)!
    .::**~ No Use for A NamE ~**::.
    lunes, 27 de julio de 2009 18:24
  • Hola.

    Agrupar y mostrar el detalle no se puede, por eso te decía que nos pasaras la especificación concreta. Una cosa que puedes hacer es utilizar una agrupación de tipo "with cube" que te muestre el agrupado y el detalle de cada subgrupo y luego tú, en la capa de presentación, ocultas aquellos registros que no necesitas. Y ojo con el having, que condiciona el resultado:

    select a.c21 as manzana,LEFT(A.c22,6) as ubicacion,count(c22) as [contador], A.c22 as SINLEFT
    from CCCLIE1 a
    where c22 is not null and c44=''
    and c21 is not null 
    group by c21,LEFT(A.c22,6), A.c22 having count('') > 1 
    with cube
    order by c21

    Otra cosa que podrías hacer es volver a cruzar con la misma tabla con una select por encima. Tampoco sé si te valdría, porque te saldrán duplicados, pero sería más o menos así:

    select C.c22, G.*
    from (select a.c21 as manzana,LEFT(A.c22,6) as ubicacion,count(c22) as [contador], A.c22 as SINLEFT
    from CCCLIE1 a
    where c22 is not null and c44=''
    and c21 is not null 
    group by c21,LEFT(A.c22,6) having count('') > 1  ) G inner join CCCLIE1 C on G.c21 = C.c21 and G.ubicacion = left(C.c22)
    order by G.c21

    Nos dices con lo que sea.

    Alberto López Grande.
    lunes, 27 de julio de 2009 18:36
    Moderador