|
■No97995 (魔界の仮面弁士 さん) に返信 > 製番 作業グループ 合計材料費 合計外注費 合計材料費 合計外注費 「合計材料費」「合計外注費」という名前の列が複数ありますね。 これだと、列名競合のエラーになってしまいます。 ⇒わかりにくい書き方になってしまい申し訳ございません。 「合計材料費」「合計外注費」は参照元テーブルが違いますので一応エラーにならず出力することが出来ました。
自分になりにSQLを作成してみて同様の結果を得られましたが魔界の仮面弁士様が作成したSQLの方がすっきりしておりますので一度内容の理解をしたいと思います。
不要だと思いますが私が作成したSQLになります。
SELECT SWITCH(本体.製番 IS NULL, オプション.製番, 本体.製番 IS NOT NULL, 本体.製番) AS 製番 ,SWITCH(本体.作業グループ IS NULL, オプション.作業グループ, 本体.作業グループ IS NOT NULL, 本体.作業グループ) AS 作業グループ ,本体.合計材料費 ,本体.合計外注費 ,オプション.合計材料費 ,オプション.合計外注費 FROM ( SELECT * FROM ( SELECT * FROM (SELECT 製番, 作業グループ, SUM(材料費) AS 合計材料費, SUM(外注費) AS 合計外注費 FROM T_製番別原価集計 WHERE 本体OP種別 = 0 AND 製番='11930028' GROUP BY 製番, 作業グループ) AS 本体 RIGHT JOIN (SELECT 製番, 作業グループ, SUM(材料費) AS 合計材料費, SUM(外注費) AS 合計外注費 FROM T_製番別原価集計 WHERE 本体OP種別 = 1 AND 製番='11930028' GROUP BY 製番, 作業グループ) AS オプション ON オプション.製番 = 本体.製番 AND オプション.作業グループ = 本体.作業グループ ) UNION ( SELECT * FROM (SELECT 製番, 作業グループ, SUM(材料費) AS 合計材料費, SUM(外注費) AS 合計外注費 FROM T_製番別原価集計 WHERE 本体OP種別 = 0 AND 製番='11930028' GROUP BY 製番, 作業グループ) AS 本体 LEFT JOIN (SELECT 製番, 作業グループ, SUM(材料費) AS 合計材料費, SUM(外注費) AS 合計外注費 FROM T_製番別原価集計 WHERE 本体OP種別 = 1 AND 製番='11930028' GROUP BY 製番, 作業グループ) AS オプション ON オプション.製番 = 本体.製番 AND オプション.作業グループ = 本体.作業グループ ) )
早急にご回答していただきありがとうございます。
|