如何在发票中汇总相同的产品?

时间:2011-08-08 01:54:14

标签: sql transactions sum

我有这个问题:

declare @usuario as varchar(50), @fecha as datetime
set @usuario ='angel'
set @fecha ='2011/08/07'

select DetalleCompra .id_ali  as [Clave],Alimento .nomAli as [Nombre Alimento], 
    (select sum (cantidad) 
     from DetalleCompra 
     inner join Alimento on DetalleCompra .id_ali =Alimento .id_ali 
     where DetalleCompra .usuario =@usuario  and fecha =@fecha  and FolioCompra is null
    ) as Cantidad, 
    Alimento .precio as [Precio Unitario], ( sum (Cantidad) * precio ) as [Precio Total] 
from DetalleCompra , Alimento 
where DetalleCompra .id_ali =Alimento.id_ali 
    and usuario =@usuario  and  fecha =CONVERT(datetime, @fecha ) and FolioCompra  is null
group by DetalleCompra .id_ali ,Alimento .nomAli , Alimento .precio , DetalleCompra .Cantidad  

其中:

usuario=user
fecha=date
detallecompra=details buy
idali= id food
nomali=food's name
foliocompra=folio purchases
precio=price
cantidad=quantity
precio total=total price

我想获得一个列表,但如果产品相同,我想总结它们并获得它们的总价。

他们有一个用户名和一个日期,在用户“接受”它们之前它们是空的。

我希望获得idali出现两次或更多次的列表,他们对该行求和,并将总价格相加。

1 个答案:

答案 0 :(得分:2)

我相信你正在寻找这样的东西。

查询按ID(id_ali),名称(nomAli)和价格(precio)列对数据进行分组。然后它总结了数量(cantidad)来创建Total Quantity列(我刚用英文写的)。此外,使用数量和价格列制定Precio Total列。

如果列fecha仅包含没有任何时间戳的日期值,则可以使用简单等于比较而不是使用DATEDIFF。

DECLARE @usuario AS VARCHAR(50)
DECLARE @fecha AS DATETIME

SET @usuario ='angel'
SET @fecha ='2011/08/07'

SELECT      dc.id_ali   AS [Clave]
        ,   al.nomAli   AS [Nombre Alimento]
        ,   al.precio   AS [Precio Unitario]
        ,   SUM(cantidad)   AS [Total Quantity]
        ,   SUM(cantidad) * al. precio as [Precio Total]            
FROM        DetalleCompra   dc
INNER JOIN  Alimento        al
ON          dc.id_ali       = al.id_ali 
WHERE       usuario         = @usuario  
AND         FolioCompra     is null
AND         DATEDIFF(DAY, fecha, @fecha) = 0
GROUP BY    dc.id_ali 
        ,   al.nomAli 
        ,   al.precio