2012-06-18 134 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