SQL - ayuda con subconsulta

 
Vista:
sin imagen de perfil
Val: 10
Ha aumentado su posición en 4 puestos en SQL (en relación al último mes)
Gráfica de SQL

ayuda con subconsulta

Publicado por Marcos (6 intervenciones) el 19/07/2017 17:22:38
Estimados, buen dia, necesito de su ayuda

tengo la siguiente tabla

Referencia Fecha tipo TIPO2
1 01/01/2017 VE VE
1 05/12/2016 CD VE
1 30/01/20107 CO VE
2 05/10/2016 VE VE
2 07/10/2017 PL VE
3 02/08/2016 VE VE
3 30/08/2016 NC VE
3 25/08/2016 PL VE

necesito agregar una columna a la consulta que repita la fecha por referencia simpre que el tipo = tipo2, necesito que finalmente devuelva

Referencia Fecha tipo TIPO2 FECHAVALIDA
1 01/01/2017 VE VE 01/01/2017
1 05/12/2016 CD VE 01/01/2017
1 30/01/20107 CO VE 01/01/2017
2 05/10/2016 VE VE 05/10/2016
2 07/10/2017 PL VE 05/10/2016
3 02/08/2016 VE VE 02/08/2016
3 30/08/2016 NC VE 02/08/2016
3 25/08/2016 PL VE 02/08/2016

mi idea es la siguiente pero me da error

select referencia as RF,fecha, tipo, tipo2, (select fecha from datos where tipo= tipo2 and RF = referencia) as FECHAVALIDA from datos

por favor agradezco la ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

ayuda con subconsulta

Publicado por Isaias (1921 intervenciones) el 19/07/2017 18:13:47
No entiendo esta consulta

1
select fecha from datos where tipo= tipo2 and RF = referencia

Sobre todo en el filtro F = referencia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 10
Ha aumentado su posición en 4 puestos en SQL (en relación al último mes)
Gráfica de SQL

ayuda con subconsulta

Publicado por Marcos (6 intervenciones) el 19/07/2017 18:21:04
Hola Isaias muchas gracias por la pronta respuesta, mi consulta sql es mucho mas grande y abarca otras tablas por eso necesito hacerla anidada. basicamente mi mayor problema es que me da error por que la consulta anidada devuelve mas de 1 registro.

no entiendo como desde la consulta anidada puedo hacer referencia al campo RF de la consulta principal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

ayuda con subconsulta

Publicado por leonardo_josue (1173 intervenciones) el 19/07/2017 18:44:08
Hola Marcos:

1
no entiendo como desde la consulta anidada puedo hacer referencia al campo RF de la consulta principal

Dado que dentro de la subconsulta estás utilizando la misma tabla que en la consulta principal, lo que tienes que hacer es usar ALIAS distintos para cada una de ellas, así podrías hacer referencia en la Subconsulta de tu Referencia principal:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
mysql> SELECT * FROM tabla;
+------------+------------+------+-------+
| Referencia | Fecha      | tipo | TIPO2 |
+------------+------------+------+-------+
|          1 | 2017-01-01 | VE   | VE    |
|          1 | 2016-12-05 | CD   | VE    |
|          1 | 2007-01-30 | CO   | VE    |
|          2 | 2016-10-05 | VE   | VE    |
|          2 | 2017-10-07 | PL   | VE    |
|          3 | 2016-08-02 | VE   | VE    |
|          3 | 2016-08-30 | NC   | VE    |
|          3 | 2016-08-25 | PL   | VE    |
+------------+------------+------+-------+
8 rows in set (0.00 sec)
 
mysql> SELECT
    ->   T1.referencia,
    ->   T1.fecha,
    ->   T1.tipo,
    ->   T1.tipo2,
    ->   ( SELECT T2.fecha
    ->     FROM tabla T2
    ->     WHERE T2.tipo = T1.tipo2
    ->           AND T2.referencia = T1.referencia) otra_fecha
    -> FROM tabla T1;
+------------+------------+------+-------+------------+
| referencia | fecha      | tipo | tipo2 | otra_fecha |
+------------+------------+------+-------+------------+
|          1 | 2017-01-01 | VE   | VE    | 2017-01-01 |
|          1 | 2016-12-05 | CD   | VE    | 2017-01-01 |
|          1 | 2007-01-30 | CO   | VE    | 2017-01-01 |
|          2 | 2016-10-05 | VE   | VE    | 2016-10-05 |
|          2 | 2017-10-07 | PL   | VE    | 2016-10-05 |
|          3 | 2016-08-02 | VE   | VE    | 2016-08-02 |
|          3 | 2016-08-30 | NC   | VE    | 2016-08-02 |
|          3 | 2016-08-25 | PL   | VE    | 2016-08-02 |
+------------+------------+------+-------+------------+
8 rows in set (0.00 sec)

Observa que utilizo los alias T1 y T2 para la misma tabla, así puedo diferenciar si se trata te la tabla interna o la principal

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 10
Ha aumentado su posición en 4 puestos en SQL (en relación al último mes)
Gráfica de SQL

ayuda con subconsulta

Publicado por Marcos (6 intervenciones) el 19/07/2017 19:37:17
Leo. muchas gracias por la ayuda..

he intentado asignar Alias, pero en este momento me aparece error The multi-part identifier xxx could not be bound.

mi consulta original donde me da error de la subconsulta ha devuelto mas de un valor :

SELECT softland.cwmovim.codaux, softland.cwmovim.ttdcod, softland.cwmovim.movfe, softland.cwmovim.movfv, softland.cwmovim.movtipdocref, (softland.cwmovim.movnumdocref) as REFERENCIA, softland.cwmovim.movdebe, softland.cwmovim.movhaber, softland.cwmovim.fecpag, softland.cwtcobr.CobDes, softland.cwtcvcl.CodCan,
(select softland.cwmovim.movfv from softland.cwmovim where softland.cwmovim.ttdcod = softland.cwmovim.movtipdocref) AS FVEN
FROM (softland.cwmovim LEFT JOIN softland.cwtcvcl ON softland.cwmovim.CodAux = softland.cwtcvcl.CodAux) LEFT JOIN softland.cwtcobr ON softland.cwtcvcl.CodCob = softland.cwtcobr.CobCod
WHERE ((softland.cwtcvcl.CodCan) Not In ('018','006')) AND ((softland.cwmovim.codaux)='79911860-2') AND ((softland.cwmovim.cpbnum)<>'00000000') AND ((softland.cwmovim.pctcod)='1-01-04-03'))ORDER BY softland.cwmovim.movnumdocref, softland.cwmovim.codaux, softland.cwmovim.movfe;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

ayuda con subconsulta

Publicado por leonardo_josue (1173 intervenciones) el 19/07/2017 19:52:19
Hola de nuevo:

En tu consulta en realidad no veo que utilices ningún ALIAS para las tablas O_o

Según lo que veo, tu tabla PRINCIPAL o tabla externa se llama softland.cwmovim y es la misma que utilizas en la SUBCONSULTA, es a estas tablas a las que DEBES ASIGNARLES ALIAS.

Quitando los campos y las tablas extras y todos los paréntesis inútiles que tienes, te debería quedar algo así:

1
2
3
4
5
6
7
8
9
10
11
12
SELECT
  ALIAS_1.movnumdocref,
  ( SELECT ALIAS_2.movfv
    FROM softland.cwmovim ALIAS_2
    WHERE ALIAS_2.ttdcod = ALIAS_1.movtipdocref) AS FVEN
FROM
  softland.cwmovim ALIAS_1
WHERE
      ALIAS_1.codaux='79911860-2'
      AND ALIAS_1.cpbnum<>'00000000'
      AND ALIAS_1.pctcod='1-01-04-03'
ORDER BY ALIAS_1.movnumdocref, ALIAS_1.codaux, ALIAS_1.movfe;
Checa si esto es te sirve.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 10
Ha aumentado su posición en 4 puestos en SQL (en relación al último mes)
Gráfica de SQL

ayuda con subconsulta

Publicado por Marcos (6 intervenciones) el 19/07/2017 20:37:58
muchas gracias leo... ya me funciona perfecto.. solo habia que asignar alias a mi tabla principal...

y muchas gracias a isaias tambien...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar