Sql sum子句方法计算别名为的总计?

Sql sum子句方法计算别名为的总计?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,这里我计算TotalQty,我想计算TotalQty的和,但TotalQty是一个别名 有可能吗?从其他方面看,我该如何解决……请帮帮我……是的,你可以这样做: ALTER PROCEDURE [dbo].[K_FS_GetFeedDivisionReport] @orderno varchar(50) AS BEGIN SET NOCOUNT ON; select OT.OrderNo,FT.Feedtype,ModeofPack='Plastic',BG.Bagtype,OD.Numof

这里我计算TotalQty,我想计算TotalQty的和,但TotalQty是一个别名
有可能吗?从其他方面看,我该如何解决……请帮帮我……

是的,你可以这样做:

ALTER PROCEDURE [dbo].[K_FS_GetFeedDivisionReport] 
@orderno varchar(50)
AS
BEGIN

SET NOCOUNT ON;
select OT.OrderNo,FT.Feedtype,ModeofPack='Plastic',BG.Bagtype,OD.Numofbags,   
(OD.numofbags*BG.Bagtype) as TotalQty,sum(TotalQty) as Total from  
K_FS_OrderconfirmDetails OD
inner join K_FS_bagtype BG on OD.bagtype=BG.sno
inner join k_FPS_FeedType FT  on FT.sno=OD.feedtype
inner join K_FS_OrderDetails OT on OT.sno = OD.orderno where OD.orderno = @orderno
group by  OT.OrderNo,FT.Feedtype,BG.Bagtype,OD.Numofbags
END
如果需要每行的totalQty,则应使用子查询:

ALTER PROCEDURE [dbo].[K_FS_GetFeedDivisionReport] 
@orderno varchar(50)
AS
BEGIN

SET NOCOUNT ON;
select OT.OrderNo,FT.Feedtype,ModeofPack='Plastic',BG.Bagtype,OD.Numofbags,   
(OD.numofbags*BG.Bagtype) as TotalQty,sum(OD.numofbags*BG.Bagtype) as Total from  
K_FS_OrderconfirmDetails OD
inner join K_FS_bagtype BG on OD.bagtype=BG.sno
inner join k_FPS_FeedType FT  on FT.sno=OD.feedtype
inner join K_FS_OrderDetails OT on OT.sno = OD.orderno where OD.orderno = @orderno
group by  OT.OrderNo,FT.Feedtype,BG.Bagtype,OD.Numofbags,OD.numofbags*BG.Bagtype
END
你不能:
SUMOD.numobags*BG.Bagtype为TotalQty,sumTotalQty为Total

如果您想要这些总计,您需要根据numobags等删除分组,从您开始对计算的值进行分组的那一刻起,不再进行完整的求和。

您可以使用子查询来实现这一点。 通过以下方式修改select语句:

ALTER PROCEDURE [dbo].[K_FS_GetFeedDivisionReport] 
    @orderno varchar(50)
    AS
    BEGIN

    SET NOCOUNT ON;
    select OT.OrderNo,FT.Feedtype,ModeofPack='Plastic',BG.Bagtype,OD.Numofbags,   
    (OD.numofbags*BG.Bagtype) as TotalQty,
    Total = (Select Sum (OD.numofbags*BG.Bagtype) from  K_FS_OrderconfirmDetails OD
    inner join K_FS_bagtype BG on OD.bagtype=BG.sno
    inner join k_FPS_FeedType FT  on FT.sno=OD.feedtype
    inner join K_FS_OrderDetails OT on OT.sno = OD.orderno where OD.orderno = @orderno)

 from  
    K_FS_OrderconfirmDetails OD
    inner join K_FS_bagtype BG on OD.bagtype=BG.sno
    inner join k_FPS_FeedType FT  on FT.sno=OD.feedtype
    inner join K_FS_OrderDetails OT on OT.sno = OD.orderno where OD.orderno = @orderno
    group by  OT.OrderNo,FT.Feedtype,BG.Bagtype,OD.Numofbags,OD.numofbags*BG.Bagtype
    END

这将计算最后一列中所有内容的总计。

您的意思是什么?您想要查询字符串,还是结果?因为结果是相同的sumOD.numofbags*BG.Bagtype=sumtottalqtyi编辑了我的回复并给了您另一个解决方案,它可能适合您的需要。是的,但我想计算TotalQty列的总和..我的意思是TotalqtyOh的所有行,我知道了,您需要一个子查询,比如TotalQty=select SUMOD.numofbags*BG.Bagtype from K_FS_orderconfirm details OD internal join K_FS_Bagtype BG on OD.Bagtype=BG.sno internal join K_FPS_FeedType FT on FT.sno=OD.orderno其中OD.orderno=@ordernoyou是正确的,但我保留了它们,以防它们可能发生错误更改主查询中的记录编号。因为所有连接都是内部连接。从技术上讲,它们不应该是内部连接,但只是以防万一,我不知道结构。我看到您已经按照OD.numobagsbg.Bagtype进行分组,所以总和不会有任何影响。是否要对集合中所有行的OD.numofbagsBG.Bagtype求和?可以通过删除分组,将分组分配给变量,并在存储过程的最终选择中返回别名为的变量,为所有行的OD.numofbags*BG.Bagtype分配和。
  select OT.OrderNo,FT.Feedtype,ModeofPack='Plastic',BG.Bagtype,OD.Numofbags,   
       (OD.numofbags*BG.Bagtype) as TotalQty,
       (select SUM(OD.numofbags*BG.Bagtype) 
        from K_FS_OrderconfirmDetails OD inner join
        K_FS_bagtype BG on OD.bagtype=BG.sno ) 
        as Total
  from K_FS_OrderconfirmDetails OD
        inner join K_FS_bagtype BG on OD.bagtype=BG.sno
        inner join k_FPS_FeedType FT  on FT.sno=OD.feedtype
        inner join K_FS_OrderDetails OT on OT.sno = OD.orderno where OD.orderno = @orderno
  group by  OT.OrderNo,FT.Feedtype,BG.Bagtype,OD.Numofbags