none
COALESCE pequenia duda RRS feed

  • Pregunta

  • Saludos a todos, explicare brevemente lo que tengo y necesito hacer pero no entiendo como, tengo una tabla usuarios con los siguientes datos

    tblUsuarios
    IdUsuario
    NombreUsuario

    Ahora tengo una tabla de ventas con los siguientes datos

    tblVentas
    IdVenta
    IdUsuario
    ValorTotal

    Tambien una tabla Productos asi:

    TblProductos
    IdProducto
    ValorProducto
    DescripcionProducto

    Por otro lado tengo una tabla Productos-Ventas donde guardo los productos comprados por el usuario en esa venta asi:

    TblProductos_Ventas
    IdVenta
    IdProducto

    Ahora necesito hacer una query a la tabla ventas donde me muestre los siguientes datos:
    IdVenta, IdUsuario, ValorTotal, COALESCE(IdProducto)
    Donde la idea es mostrar todos los id productos de esa venta, pasando como unico parametro de busqueda el IdUsuario, ya se necesita saber las ventas por Usuario 

    Lo tengo de la siguiente manera

    DECLARE @productos VARCHAR(1000)
    SELECT @productos COALESCE@productos+ ', ', '') + CONVERT(VARCHAR, IdProducto) FROM TblProductos
    left JOIN tblVentas on TblProductos_Ventas.IdVenta=TblVentas.IdVenta 
    where TblVentas.IdUsuario='12345'
    
    SELECT TblVentas.IdVenta, TblVentas.IdUsuario, TblVentas.ValorTotal, (select @productos) as [Producto] from tblVentas
    where TblVentas.IdUsuario='12345'

    pero el error que tengo es que en productos me muestra todos los productos de todas las ventas del usuario, y necesito que me los agrupe por venta.
    Que error estoy cometiendo?



    jueves, 21 de julio de 2016 22:44

Respuestas

  • Jhonatan Plata,

    Intenta hacer lo siguiente:

    SELECT
    	v.IdVenta,
    	v.IdUsuario,
    	v.ValorTotal,
    	(SELECT STUFF((SELECT ',' + CONVERT(varchar(10), x.IdProducto) FROM tblProductos_Ventas x WHERE (x.IdVenta = v.IdVentas) FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(4000)'), 1, 1, ''))
    FROM
    	tblVentas v	
    WHERE
    	(v.IdUsuario = '123456');


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Jhonatan Plata viernes, 22 de julio de 2016 12:25
    viernes, 22 de julio de 2016 1:23

Todas las respuestas

  • Jhonatan Plata,

    Intenta hacer lo siguiente:

    SELECT
    	v.IdVenta,
    	v.IdUsuario,
    	v.ValorTotal,
    	(SELECT STUFF((SELECT ',' + CONVERT(varchar(10), x.IdProducto) FROM tblProductos_Ventas x WHERE (x.IdVenta = v.IdVentas) FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(4000)'), 1, 1, ''))
    FROM
    	tblVentas v	
    WHERE
    	(v.IdUsuario = '123456');


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Jhonatan Plata viernes, 22 de julio de 2016 12:25
    viernes, 22 de julio de 2016 1:23
  • Gracias Williams

    He probado tu consulta y me sale igual que la mia, es decir por cada registro de venta me muestra todos los productos de todas las ventas... Obviamente esta faltando algo en tu consulta y la mia que amarre los productos vendidos al IdVenta, pero la verdad no logro encontrar alguna forma de establecer ese IdVenta, ya que el unico parametro de busqueda debe ser el IdUsuario

     
    viernes, 22 de julio de 2016 12:14
  • Gracias Williams, ya me pudo correr como queria, me estaba equivocando en tu ejemplo poniendo un dato malo pero ya lo corregi..
    viernes, 22 de julio de 2016 12:24