すみません、以下のページで問題は解決していたのですが
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
プレビュー