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+'%'

同じストアド プロシージャで PP04 と PP12 の一部を計算するためのストアド プロシージャを記述したいのですが、クエリを 1 つのステートメントで記述するにはどうすればよいですか。

4

2 に答える 2

0

合計を返す方法、または合計と一緒に部分合計を返すかどうかが明確ではありません。

合計値のみが必要な場合は、他の 2 つのクエリの代わりに次のクエリを使用します。

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')
  )
;

3 つの値すべてが必要な場合は、それらを 1 つの行の個別の列として使用するかどうかを指定する必要があります。

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

または、単一の列で別々の行に:

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

前者 (単一行、個別の列) の場合、これを実現する 1 つの方法を次に示します。

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
于 2012-06-19T07:18:21.710 に答える
0
create procedure calcProc as
   declare @returnValue int

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

   select @returnValue 
go
于 2012-06-18T07:08:33.670 に答える