none
sub consulta en sql server RRS feed

  • Pregunta

  • Buenos dias:

    Amigos del foro tengo una pregunta:

    quiero hacer una subconsulta pero no veo la manera de hacerlo les planteo esto es mi caso:

    tabla ventas  [idventa,nom_cliente, ruc,...,...,..]

    para ver las ventas solo con un select y si quiero filtrar por ruc , etc ejm:

    idventa  nom_cliente  ruc  ....

    121        juan carlos  45254854212

    122        pedro vera   26532565212

    .....         ...................  .......................

    ....          ..................   ........................

    tabla detalleVentas

    al realizar la consulta en el detalleventas quiero que me arroje el detalle del parametro idventa de la tabla ventas :

    iddetalleventas  idventas  nomprod   canti

    1                        121          teclado       5

    2                        121          mouse        51

    3                         121         monitor       5

    4                         122         lcd               1

    5                         122         pcu              58

    6                         122        disco duro     63

    ..                    ............      ...............       .....

    ..                    ............      ...............       .....

    ..                    ............      ...............       .....

    espero halla sido claro con mi pregunta yo creo q eso puede ser posible con un while poniendo en una variable local  idventa de la tabla ventas  para seguidamente consultar en la tabla detalle de ventas  con ese idventas pero no se como expresarlo en el sql server . 

    espero su ayuda por favor 

    sábado, 21 de julio de 2012 14:51

Respuestas

  • hola ya que no tengo respuestas, yo solo me respondere. al inicio me complique mucho y era tan simple:

    trabajando con el inner join de la siguiente manera:

    select * from detalleventas D inner join ventas V on D.idventas=V.idventas where .............

    esto como resultado me da:

    iddetalleventas  idventas  nomprod   canti

    1                        121          teclado       5

    2                        121          mouse        51

    3                         121         monitor       5

    4                         122         lcd               1

    5                         122         pcu              58

    6                         122        disco duro     63

    ..                    ............      ...............       .....

    ..                    ............      ...............       .....

    ..                    ............      ...............       .....

    como ustedes se darán cuenta es tan simple, pero una gran pregunta se podrá tener el mismo resultado haciendo subconsultas utilizando while.... empecemos a debatir espero sus comentarios amigos

     

    • Marcado como respuesta Robin Ramirez sábado, 21 de julio de 2012 20:21
    sábado, 21 de julio de 2012 17:17

Todas las respuestas

  • Cual es el resultado que buscas-
    ¿Las filas de detalleVentas, cada una con los detalles de la tabla ventas?
    ¿Las filas de ventas con algun resumen de las filas de detalleventas?
    ¿Otra opción?


    Blog: http://about.me/GeriReshef

    sábado, 21 de julio de 2012 16:04
  • el resultado efectivamente es de la tabla detalleventas amigo . 


    sábado, 21 de julio de 2012 16:37
  • iddetalleventas  idventas  nomprod   canti

    1                        121          teclado       5

    2                        121          mouse        51

    3                         121         monitor       5

    4                         122         lcd               1

    5                         122         pcu              58

    6                         122        disco duro     63

    ..                    ............      ...............       .....

    ..                    ............      ...............       .....

    ..                    ............      ...............       .....

    pero para tener este resultado tengo que saber los datos de la table ventas "idventas".

    sábado, 21 de julio de 2012 16:45
  • hola ya que no tengo respuestas, yo solo me respondere. al inicio me complique mucho y era tan simple:

    trabajando con el inner join de la siguiente manera:

    select * from detalleventas D inner join ventas V on D.idventas=V.idventas where .............

    esto como resultado me da:

    iddetalleventas  idventas  nomprod   canti

    1                        121          teclado       5

    2                        121          mouse        51

    3                         121         monitor       5

    4                         122         lcd               1

    5                         122         pcu              58

    6                         122        disco duro     63

    ..                    ............      ...............       .....

    ..                    ............      ...............       .....

    ..                    ............      ...............       .....

    como ustedes se darán cuenta es tan simple, pero una gran pregunta se podrá tener el mismo resultado haciendo subconsultas utilizando while.... empecemos a debatir espero sus comentarios amigos

     

    • Marcado como respuesta Robin Ramirez sábado, 21 de julio de 2012 20:21
    sábado, 21 de julio de 2012 17:17
  • Tu puedes asi (aunque es muy mala idea y absolutamente inutil):

    Declare	@ID Int;
    Select	@ID=Min(iddetalleventas) From DetalleVentas;
    While	@ID Is Not Null
    	Begin
    	Select * From DetalleVentas Where iddetalleventas=@ID;
    	Select	@ID=Min(iddetalleventas) From DetalleVentas Where iddetalleventas>@ID;
    	End


    Blog: http://about.me/GeriReshef

    • Marcado como respuesta Robin Ramirez sábado, 21 de julio de 2012 18:29
    • Desmarcado como respuesta Robin Ramirez sábado, 21 de julio de 2012 18:34
    sábado, 21 de julio de 2012 17:40
  • amigo,al parecer no entendio mi pregunta aunq ya esta resuelta , lo que decia es:

    tenemos dos tablas 

    1.- ventas(idventas pk,....)

    2.- detalleVentas(iddetalleventa pk idventas fk)

    lo que queria es listar el detalle de ventas por cada idventa  que tenia.

    la solucion es con el inner join  

    y loque propuse es:

    si con un "while" puedo tener el mismo resultado como q arroja el "iner join". ejm:

    inner join 

    select * from detalleventas D inner join ventas V on D.idventas=V.idventas where .............

    Resultado:

    iddetalleventas  idventas  nomprod   canti

    1                        121          teclado       5

    2                        121          mouse        51

    3                         121         monitor       5

    4                         122         lcd               1

    5                         122         pcu              58

    6                         122        disco duro     63

    ..                    ............      ...............       .....

    ..                    ............      ...............       .....

    ..                    ............      ...............       .....

    while

    Sentencia:

    ?????????????????????????????????????????????????????

    Resultado:

    iddetalleventas  idventas  nomprod   canti

    1                        121          teclado       5

    2                        121          mouse        51

    3                         121         monitor       5

    4                         122         lcd               1

    5                         122         pcu              58

    6                         122        disco duro     63

    ..                    ............      ...............       .....

    ..                    ............      ...............       .....

    ..                    ............      ...............       .....

    ahora si espero haber sido claro...

    sábado, 21 de julio de 2012 18:41
  • Me gustaría saber para que necesitas este While..
    Sin embargo- vamos a tratar otra solución:

    Declare	@ID Int,
            @S Varchar(Max);
    Select	Top 1 @ID=iddetalleventas,
            @S=Cast(iddetalleventas As Varchar(Max))+','
               +Cast(idventas As Varchar(Max))+','
               +nomprod+','
               +Cast(canti As Varchar(Max))
    From DetalleVentas
    Order By iddetalleventas;
    While	@ID Is Not Null
    	Begin
    	Print @S;
            Set @ID=Null;
    	Select Top 1 @ID=iddetalleventas,
                    @S=Cast(iddetalleventas As Varchar(Max))+','
                      +Cast(idventas As Varchar(Max))+','
                      +nomprod+','
                      +Cast(canti As Varchar(Max))
            From DetalleVentas
            Where iddetalleventas>@ID
            Order By iddetalleventas;
    	End


    Blog: http://about.me/GeriReshef

    sábado, 21 de julio de 2012 19:52