如何将每行中的所有行的总和

时间:2011-07-22 02:34:22

标签: sql-server

这是我的疑问:

SELECT clientes.nombre as [NombreCliente], 
       venta.usuario  as [NombreVendedor], 
       SUM((listaventa.precio) ) as [FinalTotal], 
       venta.id as [IdVenta],
       venta.fecha as [Fecha], 
       idproducto as [clave],
       producto.descripcion ,  
       listaventa.precio as [preciounitario], 
       listaventa.cantidad,
       listaventa.total as  [PrecioTtoal] 
 FROM venta  
 JOIN clientes on venta.idcliente = clientes.id  
 JOIN listaventa on listaventa.idventa=venta.id  
 JOIN producto on listaventa .idproducto =producto.id  
WHERE venta.id ='36' 
GROUP BY clientes.nombre, venta.usuario, venta.id, venta.fecha, listaventa.idproducto, producto.descripcion,  listaventa.precio, listaventa.cantidad, listaventa.total 

问题是,我得到的是总和,因为查询正在检查id的id,它永远不会返回一个总和(listaventa.precio)它返回的数字比cantidad * preciou(每个产品但它永远不会总和) 。否则,如果我尝试它

SELECT clientes.nombre as [NombreCliente], 
       venta.usuario  as [NombreVendedor], 
       SUM((listaventa.precio) ) as [FinalTotal], 
       venta.id as [IdVenta],
       venta.fecha as [Fecha], 
       idproducto as [clave],
       producto.descripcion ,  
       listaventa.precio as [preciounitario], 
       listaventa.cantidad,
       listaventa.total as  [PrecioTtoal] 
  FROM venta  
  JOIN clientes on venta.idcliente = clientes.id  
  JOIN listaventa on listaventa.idventa=venta.id  
  JOIN producto on listaventa .idproducto =producto.id  
 WHERE venta.id ='36' 
   AND venta.id IN (SELECT * 
                      FROM listaventa 
                     WHERE idventa = 36)

我收到此错误:

  

当EXISTS没有引入子查询时,只能在选择列表中指定一个表达式。

2 个答案:

答案 0 :(得分:1)

listaventa.precio条款中删除GROUP BY

如果您允许聚合,则应该为该字段生成正确的SUM

答案 1 :(得分:1)

如果您正在尝试打印订单/发票/收据/装箱单,我认为这正是您要找的:

select     clientes.nombre as [NombreCliente], venta.usuario as [NombreVendedor], 
           venta.fecha, venta.id as [IdVenta], idproducto as [clave], 
           producto.descripcion, listaventa.precio as [preciounitario], 
           SUM(listaventa.cantidad) as [cantidad], 
           SUM(listaventa.total) as [LineaTotal], 
           (SELECT SUM(listaventa.total) FROM listaventa WHERE idventa = '36') 
           as [VentaTotal]

from       venta 
inner join clientes on venta.idcliente = clientes.id 
inner join listaventa on listaventa.idventa = venta.id 
inner join producto on listaventa.idproducto = producto.id  

where      venta.id ='36'

group by   clientes.nombre, venta.usuario, venta.fecha, venta.id, 
           listaventa.idproducto, producto.descripcion, listaventa.precio