SQLserver2008 で商品コードを1000と1001を結合させて数量を集計したい

ゆうさま
2014-05-23 18:30 1548 1
現在下記のようなコードで途中までは行けてるのですが
商品コードの01011と1101、01012と1102の数量を合算させたいです。
合体後の商品コードは01011と01012とします。

可能であれば各コードに商品名を追加したいです。
(現状商品名1は有るのですが書き換えされているのでグループ化するとバラバラになるので・・・・)


テーブルは以下のとおりです。
指定納期,商品コード,数量
2014021501011,5
20140215,01012,4
20140215,01011,1
20140215,01012,2
20140215,01024,3
20140215,01041,5
20140215,01021,7
20140215,01022,6
20140215,1101,4
20140215,1102,3



SELECT 商品コード
,SUM(受注数量) as 受注数量

FROM [受注トラン]

where 指定納期='20140215'
and (商品コード='01011'
or 商品コード='01012'
or 商品コード='01021'
or 商品コード='01022'
or 商品コード='1101'
or 商品コード='1102'
or 商品コード='01024'
or 商品コード='01041')

group by 
[商品コード]

コメント

2014年 06月 17日 (19:23)
こんにちは。
イノ(inno)です。

LEFT OUTER JOIN でコードを定義している別のテーブルを作成すればできると思います。
下記にテストSQLを作成しましたので、ご確認ください。

-- ## テーブル作成
CREATE TABLE dbo.TempData
(
LogDate char(8)
,Code varchar(10)
, Cnt int
)

--## 合体する商品コード関連テーブル作成
CREATE TABLE dbo.TempCodeGroup
(
MainCode varchar(10)
,Code varchar(10)
)

-- ## テストデータ登録
INSERT INTO dbo.TempData
SELECT '20140215','01011',5 union all
SELECT '20140215','01012',4 union all
SELECT '20140215','01011',1 union all
SELECT '20140215','01012',2 union all
SELECT '20140215','01024',3 union all
SELECT '20140215','01041',5 union all
SELECT '20140215','01021',7 union all
SELECT '20140215','01022',6 union all
SELECT '20140215','1101',4 union all
SELECT '20140215','1102',3

--## 合体する商品コードを登録
INSERT INTO dbo.TempCodeGroup
SELECT '01011', '01011' UNION ALL
SELECT '01011', '1101' UNION ALL
SELECT '01012', '01012' UNION ALL
SELECT '01012', '1102'


-- ## 結果
SELECT ISNULL(B.MainCode, A.Code) AS Code, SUM(Cnt) AS Cnt
FROM dbo.TempData A
LEFT OUTER JOIN TempCodeGroup B
ON A.Code = B.Code
WHERE LogDate = '20140215'
GROUP BY ISNULL(B.MainCode, A.Code)

--#########################################################
--##
--## 商品名まで出力したい場合は、下記の作業を追加でしてください。

--## 商品名のテーブル作成
CREATE TABLE dbo.TempCode
(
Code varchar(10)
,CodeName nvarchar(10)
)

--## 商品コードと商品名を登録
INSERT INTO dbo.TempCode
SELECT '01011', N'商品名01011' union all
SELECT '01012', N'商品名01012' union all
SELECT '01021', N'商品名01021' union all
SELECT '01022', N'商品名01022' union all
SELECT '01024', N'商品名01024' union all
SELECT '01041', N'商品名01041'

-- ## 結果
SELECT A.Code, B.CodeName, A.Cnt
FROM
(
SELECT ISNULL(B.MainCode, A.Code) AS Code, SUM(Cnt) AS Cnt
FROM dbo.TempData A
LEFT OUTER JOIN TempCodeGroup B
ON A.Code = B.Code
WHERE LogDate = '20140215'
GROUP BY ISNULL(B.MainCode, A.Code)
) A LEFT OUTER JOIN dbo.TempCode B
ON A.Code = B.Code