Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-08-2012
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
Talking concatenar dos valores de registros distintos según duplicados

Saludos comunidad

Estoy tratando de hacer una consulta MySQL sobre la siguiente tabla

Código SQL [-]
mysql> explain orden_trabajadores_estibadores;
+-----------------+------------------+------+-----+---------+----------------+
| Field           | Type             | Null | Key | Default | Extra          |
+-----------------+------------------+------+-----+---------+----------------+
| id_trabajadores | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| expediente      | varchar(11)      | NO   |     | NULL    |                |
| numero          | varchar(7)       | NO   |     | NULL    |                |
| orden           | varchar(7)       | NO   |     | NULL    |                |
| turno           | varchar(5)       | NO   |     | NULL    |                |
| fecha           | varchar(10)      | NO   |     | NULL    |                |
| convenio        | varchar(7)       | NO   |     | NULL    |                |
+-----------------+------------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

Al hacer un select sobre esta tabla tengo esta informacion

Código SQL [-]
mysql> select expediente, orden  from  orden_trabajadores_estibadores;
+------------+-------+
| expediente | orden |
+------------+-------+
| 32444      | 2353  |
| 32491      | 2353  |
| 32480      | 2353  |
| 33280      | 2353  |
| 31345      | 993   |
| 32459      | 2353  |
| 32444      | 993   |
| 32077      | 368   |
| 32084      | 368   |
| 32055      | 368   |
| 31136      | 368   |
| 32839      | 3361  |
+------------+-------+
12 rows in set (0.00 sec)

Lo que deseo es ver los expedientes que estan dobles y poder determinar en que ordenes se encuentran, para ello uso la siguiente sentencia

Código SQL [-]
mysql> select expediente, count(expediente) as total_expediente
    -> from orden_trabajadores_estibadores
    -> group by expediente;
+------------+------------------+
| expediente | total_expediente |
+------------+------------------+
| 31136      |                1 |
| 31345      |                1 |
| 32055      |                1 |
| 32077      |                1 |
| 32084      |                1 |
| 32444      |                2 |
| 32459      |                1 |
| 32480      |                1 |
| 32491      |                1 |
| 32839      |                1 |
| 33280      |                1 |
+------------+------------------+
11 rows in set (0.00 sec)

Como podemos ver esta vez ya veo el expediente y al lado la cantidad de veces que esta repetido, sin embargo necesito saber en que ordenes se repitió, para ello se me ocurrió la idea de concatenar y ahi es donde se trabo la cosa

Código SQL [-]
mysql> SELECT expediente, count(expediente) as total,
    ->  (SELECT CONCAT_WS('-',orden_trabajadores_estibadores.orden,
    ->                                    orden_trabajadores_estibadores.orden))
    ->    as ubicacion
    -> FROM orden_trabajadores_estibadores;
+------------+-------+-----------+
| expediente | total | ubicacion |
+------------+-------+-----------+
| 32444      |    12 | 2353-2353 |
+------------+-------+-----------+
1 row in set (0.00 sec)

Aqui veo la Orden pero solo la del primer registro repetido y necesito ver la del primero + la del segundo + n registros ademas el total que me muestra es el de los registros que se encuentran en la tabla y no solo los repetidos, agregamos el group y queda asi

Código SQL [-]
mysql> SELECT expediente, count(expediente) as total,
    ->  (SELECT CONCAT_WS('-',orden_trabajadores_estibadores.orden,
    ->                        orden_trabajadores_estibadores.orden))
    ->    as ubicacion
    -> FROM orden_trabajadores_estibadores
    -> group by expediente;
+------------+-------+-----------+
| expediente | total | ubicacion |
+------------+-------+-----------+
| 31136      |     1 | 368-368   |
| 31345      |     1 | 993-993   |
| 32055      |     1 | 368-368   |
| 32077      |     1 | 368-368   |
| 32084      |     1 | 368-368   |
| 32444      |     2 | 2353-2353 |
| 32459      |     1 | 2353-2353 |
| 32480      |     1 | 2353-2353 |
| 32491      |     1 | 2353-2353 |
| 32839      |     1 | 3361-3361 |
| 33280      |     1 | 2353-2353 |
+------------+-------+-----------+
11 rows in set (0.00 sec)

Sigue mostrandome la orden del primer registro repetido, algo obvio porque no he encontrado una forma de decirle que lo haga para cada registro, asi que todo lo que hace es repetir dos veces la instruccion y lo ideal seria que lo hiciera pero diferenciando entre los registros repetidos, no he usado aun el IF THEN ELSE voy a tratar ahora aver si algo sale de ahi (aunque aun no tengo muy claro como voy a hacerlo) asi que si a alguien se le ocurre una idea de como hacerlo me vendría bien la ayuda.
Gracias de antemano por su tiempo
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________

Última edición por lmpadron fecha: 29-08-2012 a las 19:08:20.
Responder Con Cita
  #2  
Antiguo 29-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Intenta algo así:

Código SQL [-]
select A.expediente, A.orden
from orden_trabajadores_estibadores A
left join (select expediente from orden_trabajadores_estibadores group by expediente having count(expediente) > 1) B on B.expediente = A.expediente
where B.expediente is not null

// Saludos
Responder Con Cita
  #3  
Antiguo 29-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
En l consulta que te puse, vas a obtener un registro por cada repetición y no uno sólo con los valores concatenados, no creo que esto último sea posible pero no lo aseguro. De todas formas, con la consulta de arriba ves únicamente los registros que se duplican, que de algo ha de servir

// Saludos
Responder Con Cita
  #4  
Antiguo 30-08-2012
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
Perfecto, muchas gracias roman !!!
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Duda contar valores distintos ldelmor Varios 1 16-07-2012 19:47:51
Valores distintos trex2000 SQL 0 03-10-2006 17:12:31
Sumar valores de distintos formularios Jayle Tablas planas 1 02-08-2005 11:28:47
Registros duplicados jgutti SQL 1 02-03-2004 16:45:47
Obtener filas que contienen dos o más valores distintos Angel Firebird e Interbase 3 14-10-2003 17:27:56


La franja horaria es GMT +2. Ahora son las 18:45:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi