2012-06-18 133 views
0
 select sum(Weight) as 'PP04' from dbo.tbl_insertxmldetails where 
     Section in (select Material from [Mst_tbl_ExtMaterialGroupList] 
     where [Ext# Matl Group] = 'PP04') and 
     OrderName like @jobno+'%' 

--PP12如何获得计算值的总和

  select sum(Weight) as 'PP12' from dbo.tbl_insertxmldetails where 
     Section in (select Material from [Mst_tbl_ExtMaterialGroupList] 
     where [Ext# Matl Group] = 'PP12') and 
     OrderName like @jobno+'%' 

我想要写存储过程Caluclating的一些PP04和PP12在同一个存储过程。如何能我写在单独的语句查询。

回答

0
create procedure calcProc as 
    declare @returnValue int 

    select @returnValue = sum(Weight) as 'PP04' ... 
    select @returnValue = @returnValue + sum(Weight) as 'PP12' ... 

    select @returnValue 
go 
0

目前尚不清楚您想要返回总金额还是您想要返还部分金额以及总金额。

如果你只想要总价值,可以使用下面的查询,而不是其他两个:

SELECT 
    Total = SUM(Weight) 
FROM dbo.tbl_insertxmldetails 
WHERE x.OrderName LIKE @jobno + '%' 
    AND Section IN (
    SELECT Material 
    FROM [Mst_tbl_ExtMaterialGroupList] 
    WHERE [Ext# Matl Group] IN ('PP04', 'PP12') 
) 
; 

如果希望所有三个值,则应指定您是否希望他们作为一个单列的单独列:

PP04 PP12 Total 
----- ----- ----- 
…  …  … 

或在单个列中,但在不同的行:

Ext# Matl Group Weight 
--------------- ------ 
PP04    … 
PP12    … 
Total   … 

如果是前者(单列,单独列),这里要完成的一个方法:

SELECT 
    PP04 = SUM(CASE m.[Ext# Matl Group] WHEN 'PP04' THEN x.Weight END), 
    PP12 = SUM(CASE m.[Ext# Matl Group] WHEN 'PP12' THEN x.Weight END), 
    Total = SUM(x.Weight) 
FROM dbo.tbl_insertxmldetails AS x 
    INNER JOIN Mst_tbl_ExtMaterialGroupList AS m ON x.Section = m.Material 
WHERE m.[Ext# Matl Group] IN ('PP04', 'PP12') 
    AND x.OrderName LIKE @jobno + '%' 
; 

如果你想在不同行的结果,那么你可以尝试与汇总分组:

SELECT 
    [Ext# Matl Group] = COALESCE(m.[Ext# Matl Group], 'Total'), 
    Weight   = SUM(x.Weight) 
FROM dbo.tbl_insertxmldetails AS x 
    INNER JOIN Mst_tbl_ExtMaterialGroupList AS m ON x.Section = m.Material 
WHERE m.[Ext# Matl Group] IN ('PP04', 'PP12') 
    AND x.OrderName LIKE @jobno + '%' 
GROUP BY 
    ROLLUP(m.[Ext# Matl Group]) 
; 

注意:如果您的数据库处于SQL Server 2000兼容模式,则GROUP BY ROLLUP()将不起作用。在这种情况下,请使用较早的语法:

… 
GROUP BY 
    m.[Ext# Matl Group] 
WITH ROLLUP