none
Agrupar campos repetidos. RRS feed

  • Pregunta

  • Que tal buenas tardes, estoy tratando de hacer la siguiente consulta:

    select op.Requirement_Id, op.Secuence,w.Operation as station, cp.Platform ,op.Description, cm.Model+'+'+cast((SELECT COUNT(*) FROM CarModels WHERE CarPlatform_Id= op.CarPlatform_Id)as varchar)as registros
    from OperationRequirements as op
    join WorkStations as w  on op.WorkStation_Id = w.WorkStation_Id
    join CarPlatform as cp on op.CarPlatform_Id = cp.CarPlatform_Id
    join CarModels as cm on cp.CarPlatform_Id = cm.CarPlatform_Id
    join Zone as z on w.ZoneId = z.ZoneId
    join Line as l on z.LineId = l.LineId
    where w.Operation='4110' and op.Secuence=1
    group by cp.Platform,op.Requirement_Id, op.Secuence,w.Operation,op.Description, cm.Model,op.CarPlatform_Id
    order by cp.Platform

    Lo que busco es por ejemplo en la columna de Platform traiga los registros sin repetir.
    ejemplo:
    3584-----1-------4110-----Billy Goat-----EscanearVIN------Z19VDR99K+4
    Trate de hacerlo con distinct pero no consegui lo que buscaba. Podrían orientarme ?

    El resultado de la consulta:

                                      platform

    3584---- 1---- 4110--- Billy Goat--- EscanearVIN--- Z19VDR99AK+4
    3584-----1---- 4110--- Billy Goat--- EscanearVIN--- Z19VDR99BK+4
    3584---- 1---- 4110--- Billy Goat--- EscanearVIN--- Z20NAR99AZ+4
    3584---- 1---- 4110--- Billy Goat--- EscanearVIN--- Z20NAR99BZ+4

    • Editado Eduardo HR viernes, 15 de noviembre de 2019 20:29
    viernes, 15 de noviembre de 2019 20:24

Respuestas

  • Que tal buenos días, muchísimas gracias por la ayuda el resultado de la consulta es el que buscaba. Había leído sobre las tablas derivadas pero no sabia como implementarlas, de nuevo muchas gracias. 

    martes, 19 de noviembre de 2019 16:05

Todas las respuestas

  • Hola Eduardo HR:

    La solución más fácil, es integrar tu consulta en una tabla derivada y agrupar en la salida.

    SELECT  D.Requirement_Id,
    		D.Secuence,
    		D.station,
    		D.Platform,
    		D.Description,
    		min(d.REGISTROS) AS Registros
     FROM (
    SELECT op.Requirement_Id
         , op.Secuence
         , w.Operation AS station
         , cp.Platform
         , op.Description
         , cm.Model + '+' + CAST(
    (
        SELECT COUNT(*)
        FROM CarModels
               WHERE CarPlatform_Id = op.CarPlatform_Id
    ) AS VARCHAR) AS registros
    FROM OperationRequirements AS op
         JOIN WorkStations AS w ON op.WorkStation_Id = w.WorkStation_Id
         JOIN CarPlatform AS cp ON op.CarPlatform_Id = cp.CarPlatform_Id
         JOIN CarModels AS cm ON cp.CarPlatform_Id = cm.CarPlatform_Id
         JOIN Zone AS z ON w.ZoneId = z.ZoneId
         JOIN Line AS l ON z.LineId = l.LineId
           WHERE w.Operation = '4110'
                 AND op.Secuence = 1
           GROUP BY cp.Platform
                  , op.Requirement_Id
                  , op.Secuence
                  , w.Operation
                  , op.Description
                  , cm.Model
                  , op.CarPlatform_Id
    ) AS D
    GROUP BY D.Requirement_Id,
    		D.Secuence,
    		D.station,
    		D.Platform,
    		D.Description
           ORDER BY Platform;

    Tablas derivadas.

    https://javifer2.wordpress.com/2019/11/06/tabla-derivada/

    Group by

    https://javifer2.wordpress.com/2019/10/04/group-by-quizas-la-clausula-mas-conflictiva/

    viernes, 15 de noviembre de 2019 21:16
  • ¿Cuál es la necesidad de las tablas de Zone y Line?

    ¿Y cómo es que se convertien Z19VDR99AK, Z19VDR99BK, Z20NAR99AZ y Z20NAR99BZ en Z19VDR99K?
    Tenga en cuenta que los primeros cuatro valores son filas diferentes en la tabla de CarModels, cada una es un valor diferente para la columna Model.

    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.


    sábado, 16 de noviembre de 2019 17:32
  • Que tal buenos días, muchísimas gracias por la ayuda el resultado de la consulta es el que buscaba. Había leído sobre las tablas derivadas pero no sabia como implementarlas, de nuevo muchas gracias. 

    martes, 19 de noviembre de 2019 16:05
  • Que tal buenos días, no es que se conviertan los datos sino lo que buscaba era contar cuantos modelos tiene cada plataforma pero al momento de mostrar la información solo se viera el primer modelo mas el número total de modelos que contiene esa plataforma.
    martes, 19 de noviembre de 2019 16:08
  • De nada Eduardo 
    martes, 19 de noviembre de 2019 17:19
  • Que tal buenos días, no es que se conviertan los datos sino lo que buscaba era contar cuantos modelos tiene cada plataforma pero al momento de mostrar la información solo se viera el primer modelo mas el número total de modelos que contiene esa plataforma.

    Además de la sugerencia de Javier, he aquí otra sugerencia:

    -- código #1 v2
    SELECT op.Requirement_Id, op.Secuence, w.Operation as station, cp.Platform, op.Description, 
           (SELECT top (1) Model FROM CarModels WHERE CarPlatform_Id = op.CarPlatform_Id order by CarPlatform_Id)
           + '+' 
           + cast ((SELECT COUNT(*) FROM CarModels WHERE CarPlatform_Id = op.CarPlatform_Id) as varchar) as registros
    from OperationRequirements as op
         join WorkStations as w  on op.WorkStation_Id = w.WorkStation_Id
         join CarPlatform as cp on op.CarPlatform_Id = cp.CarPlatform_Id
         join Zone as z on w.ZoneId = z.ZoneId
         join Line as l on z.LineId = l.LineId
    where w.Operation = '4110' and op.Secuence = 1
    order by cp.Platform;
    No lo probé; puede contener error(es).


    José Diz     Belo Horizonte, MG - Brasil  


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    martes, 19 de noviembre de 2019 19:30