合計を返す方法、または合計と一緒に部分合計を返すかどうかが明確ではありません。
合計値のみが必要な場合は、他の 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