すみません、以下のページで問題は解決していたのですが
https://teratail.com/questions/292474#reply-413763
新たな壁にぶち当たりました。
商品ID 商品名 商品価格 数量 Ord 0001 シャツ 3000 1 1 0001 送料 330 1 2 0002 靴 5000 1 1 0003 スラックス 8000 1 1 0003 スラックス 8000 2 1 0003 送料 330 1 2 0003 送料 330 2 2
0003のような特殊なパターンがあり
スラックスの重複は残しつつ
一番下の送料レコードの重複分だけを除外したいのですが、どうやってもうまくいきません。
固有の値を設定して重複を無くそうとしても、数量が違うので当然まとまりませんし
そもそも集計クエリでスラックスを1レコードにまとめることは
出力テーブルの読込先である外部ソフトのフォーマット上NGなので
送料の最小を取っても、当然スラックスに影響してしまい、
抽出条件で何とかならないか足掻いてみましたが、圧倒的な脳みそ不足でどうにもなりませんでした。
これはもう根本的に元のクエリを変えなければならないのでしょうか?
元のデータと、希望の結果も示してください。
sazi様
すみません、希望している結果は下の通りです。
商品ID    商品名    商品価格     数量  Ord
0001    シャツ      3000       1    1
0001    送料      330       1    2
0002    靴       5000        1    1
0003    スラックス  8000       1    1
0003    スラックス   8000       2    1
0003    送料       330      1    2
数量が小さいほうの送料レコードを残す形にすることが理想です。
元データのパターンも欲しかったのですが。
推測して回答しておきます。
数量に関しては、元の質問にはないので考慮していません。
すみません、いただいたコードを反映させようとしましたが
WHERE 文にIIf式を使用しているせいでエラーになってしまいます。
また、手数料のみにしてエラーを回避しても、スラックスの送料が両方消えてしまいました。
元データは以下のようになっています!
商品ID  商品名   商品価格  手数料  送料  値引き  数量
0001   シャツ     3000   330     0	     0    1
0002    靴	    5000    0       770   0    1
0003   ジャケット	 10000   0	      0   -1565    1
0003   ジャケット	 10000   0	      0   -1565   2
0004   スラックス	 12000   0     0    0    1
ですので、以前いただいたSQLに手を加えて
以下のようにしています(こちらの諸事情で数値はすべて文字列型にしています)。
SELECT 商品ID, 商品名, 商品価格 AS 商品単価, 1 As Ord, 数量
FROM テーブル名
UNION ALL SELECT 商品ID, iif(手数料<>'0','手数料',iif(送料<>'0','送料',iif(値引き<>'0','値引き',''))), iif(手数料<>'0',手数料,iif(送料<>'0',送料,iif(値引き<>'0',値引き,'0'))), 2, 数量
FROM テーブル名
WHERE iif(手数料<>'0',手数料,iif(送料<>'0',送料,iif(値引き<>'0',値引き,'0')))
ORDER BY 商品ID, Ord;
結果は、以下のようになっています。
商品ID  商品名  商品単価  Ord  数量
0001   シャツ   3000   1   1
0001   手数料   330    2   1
0002   靴     5000   1   1
0002   送料    770    2   1
0003   ジャケット	 10000  1   1
0003   ジャケット	 10000  1   2
0003   値引き   -1565   2   1
0003   値引き   -1565   2   2
0004   スラックス	 12000	 1   1
ここから重複している送料を抜いて、以下のようにしたいです。
商品ID  商品名  商品単価  Ord  数量
0001   シャツ   3000   1   1
0001   手数料   330    2   1
0002   靴     5000   1   1
0002   送料    770    2   1
0003   ジャケット	 10000  1   1
0003   ジャケット	 10000  1   2
0003   値引き   -1565   2   1
0004   スラックス	 12000	 1   1
コメントではなく、質問を編集して下さい。
このコメント欄は隠れているので、回答する側からは見落とす場合もあります。

回答1件
あなたの回答
tips
プレビュー

