none
Count distinct con generador de consultas RRS feed

  • Pregunta

  • Hola

    Tengo una tabla con dos campos N_CAJA y N_PALET, con el mismo numero de N_PALET, tengo distintas N_CAJAS.

    Ej:

    N_caja  N_palet

    10            1

    10            1

    12            2

    13            1

    Quiero hacer una consulta con el generador de consultas de VS 2017, para contar el numero de cajas del palet 1 y que a su vez que del campo N_cajas solo cuente los valores unicos.

    Lo he intentado con "Distinct" y no da lo resultados deseados y con count distinct da fallos.

    Con

    SELECT DISTINCT COUNT(N_CAJA) AS Qty
    FROM            EMPAQUETADO
    GROUP BY N_PALET
    HAVING        (N_PALET = ?)

    El resultado es 3, lo cual no me sirve, necesito 2 ya que hay 3 cajas en el palet 1 pero realmente hay 2 cajas

    Gracias

    jueves, 11 de mayo de 2017 15:56

Respuestas

  • [...] No se que estoy haciendo mal, pero he probado todas las soluciones que he encontrado y ninguna funciona.

    ¿Será que intentas tomar cualquier solución sin considerar que no todo aplica para Microsoft Access?. Has escrito tu requerimiento en el foro de SQL Server sin aclarar que ocupas Access como gestor de base de datos.

    Bien, entiendo que Microsoft Access no soporta la cláusula DISTINCT como argumento de la función COUNT() así que vamos a tener que cambiar la consulta:

    SELECT
        COUNT(*) AS Expr1
    FROM
        (SELECT        
    	   N_PALET, N_caja
        FROM            
    	   EMPAQUETADO
        WHERE        
    	   (N_PALET = ?)
        GROUP BY
    	   N_PALET, N_caja) AS T
    GROUP BY
        T.N_PALET

     
    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta vnauj sábado, 13 de mayo de 2017 10:44
    viernes, 12 de mayo de 2017 20:42

Todas las respuestas

  • Hola

    Tengo una tabla con dos campos N_CAJA y N_PALET, con el mismo numero de N_PALET, tengo distintas N_CAJAS.

    Ej:

    N_caja  N_palet

    10            1

    10            1

    12            2

    13            1

    Quiero hacer una consulta con el generador de consultas de VS 2017, para contar el numero de cajas del palet 1 y que a su vez que del campo N_cajas solo cuente los valores unicos.

    Lo he intentado con "Distinct" y no da lo resultados deseados y con count distinct da fallos.

    Con

    SELECT DISTINCT COUNT(N_CAJA) AS Qty
    FROM            EMPAQUETADO
    GROUP BY N_PALET
    HAVING        (N_PALET = ?)

    El resultado es 3, lo cual no me sirve, necesito 2 ya que hay 3 registros en el palet 1 pero realmente hay 2 cajas

    Gracias


    jueves, 11 de mayo de 2017 15:57
  • Puedes contar los valores distintos, por ejemplo:

    SELECT COUNT(DISTINCT N_CAJA) AS Qty
    FROM EMPAQUETADO
    WHERE N_PALET = ?


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 11 de mayo de 2017 16:00
  • Saludos,

    Podrías contar solo los registros únicos, si deseas al final le agregas HAVING para filtrar a nivel de grupos. Prueba así:

    DECLARE @Empaquetado Table
    (
    N_caja int,
    N_palet int
    );
    
    INSERT INTO @Empaquetado 
    VALUES
    (10,1),
    (10,1),
    (12,2),
    (13,1)
    
    
    SELECT 
    	COUNT(DISTINCT N_CAJA) AS Qty,
    	N_palet
    FROM 
    	@Empaquetado
    GROUP BY 
    	N_palet
    HAVING
    	N_palet = 1

    Salida:

    Qty N_palet
    2 1


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Steve Morrison

    jueves, 11 de mayo de 2017 19:21
  • Gracias por la repuesta pero da un

    "Error de sintesis (falta operador) en la expresón de sonsulta 'COUNT(DISTINCT N_CAJA)'


    • Editado vnauj viernes, 12 de mayo de 2017 18:17
    viernes, 12 de mayo de 2017 6:27
  • Gracias por la repuesta pero da un

    "Error de sintesis (falta operador) en la expresón de sonsulta 'COUNT(DISTINCT N_CAJA)'
    • Editado vnauj viernes, 12 de mayo de 2017 18:17
    viernes, 12 de mayo de 2017 6:27
  • Esta mal escrito, prueba:

    COUNT(DISTINCT N_CAJA) AS Qty,


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Steve Morrison

    viernes, 12 de mayo de 2017 13:45
  • Hola de nuevo, sigue dando el mismo error.

    "Error de sintesis (falta operador) en la expresón de sonsulta "COUNT(DISTINCT N_CAJA) as Qty"

    Gracias

    viernes, 12 de mayo de 2017 17:25
  • ¿Puedes adjuntar el código que llevas escrito?

    ¿Qué gestor de base de datos ocupas? ¿SQL Server?

    viernes, 12 de mayo de 2017 17:29
  • Hola

    Uso una tabla de access y visual studio 2017

    Entro en el dataset, seleciono con boton derecho agregar consulta sobre EMPAQUETADOTableAdapter. Se abre el asistente de consultas, seleciono "select "que devuelve un solo valor

    Pulso sobre generador de consultas, seleciono los campos N_caja y N_palet, a n_caja en "agrupar por" le pongo "count distinct" y a n_palet se pongo" where" criterio=?

    el asistente me genera un sql (Quiero entender que la opcion que se genera automaticamente es la correcta)

    "SELECT        COUNT(DISTINCT N_CAJA) AS Expr1
    FROM            EMPAQUETADO
    WHERE        (N_PALET = ?)"

    cuando ejecuto la consulta me pide en valor de N_palet y luego me arroja el fallo de error de sintesis de falta operador.

    he provado

    "SELECT        COUNT(DISTINCT (N_CAJA)) AS Expr1
    FROM            EMPAQUETADO
    WHERE        (N_PALET = ?)"

    y tambien da error

    No se que estoy haciendo mal, pero he probado todas las soluciones que he encontrado y ninguna funciona.






    • Editado vnauj viernes, 12 de mayo de 2017 18:26
    viernes, 12 de mayo de 2017 18:09
  • [...] No se que estoy haciendo mal, pero he probado todas las soluciones que he encontrado y ninguna funciona.

    ¿Será que intentas tomar cualquier solución sin considerar que no todo aplica para Microsoft Access?. Has escrito tu requerimiento en el foro de SQL Server sin aclarar que ocupas Access como gestor de base de datos.

    Bien, entiendo que Microsoft Access no soporta la cláusula DISTINCT como argumento de la función COUNT() así que vamos a tener que cambiar la consulta:

    SELECT
        COUNT(*) AS Expr1
    FROM
        (SELECT        
    	   N_PALET, N_caja
        FROM            
    	   EMPAQUETADO
        WHERE        
    	   (N_PALET = ?)
        GROUP BY
    	   N_PALET, N_caja) AS T
    GROUP BY
        T.N_PALET

     
    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta vnauj sábado, 13 de mayo de 2017 10:44
    viernes, 12 de mayo de 2017 20:42
  • Hola

    1. Pedir disculpas por postear en el foro equivocado.
    2. Agradeceros la ayuda
    3. Tu solución es correcta ahora tengo los resultados que necesito

     

    Un millón de gracias Willams Morales

    • Marcado como respuesta vnauj sábado, 13 de mayo de 2017 20:05
    • Desmarcado como respuesta Joyce_ACModerator lunes, 15 de mayo de 2017 17:33
    sábado, 13 de mayo de 2017 10:46