こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

データが重複するのを回避するには・・・(泣)

SQLでサブクエリを作りましたが結果が複数同じものが出てしまいます。
DISTINCTだと一つの行しか見えなくなってしまいます。
レコードの構成自体がそうなっているからなんですが・・・
SELECT 担当, 商品, 売上品 FROM TableName
WHERE
担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '竹輪') AND
担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '胡瓜') AND
売上品 IN ('竹輪','胡瓜')
;

竹輪と胡瓜の要素を含んでいる担当を出したいのですが”担当”が重複してしまうのを解消したいです。
あとOrder By とGroup Byは併用不可ですか?
_____担当_____商品_____売上品

_____XXXX_____1111______竹輪
_____XXXX_____1111______胡瓜
_____XXXX_____1111______西瓜
_____XXXX_____1111______ハンバーグ
_____XXXX_____2222______竹輪
_____XXXX_____2222______茄子
_____XXXX_____2222______西瓜
_____XXXX_____2222______生姜焼き
_____XXXX_____2222______柚子
_____XXXX_____3333______竹輪
_____XXXX_____3333______キャベツ
_____XXXX_____3333______胡瓜
_____XXXX_____3333______冬瓜

投稿日時 - 2008-08-05 00:23:48

QNo.4228521

すぐに回答ほしいです

質問者が選んだベストアンサー

No.1です。それはこういうことですか?
_____担当_____商品_____売上品
_____XXXX_____1111______竹輪
______________1111______胡瓜
______________3333______竹輪
______________3333______胡瓜
だとすると、それは「見栄えの調整」ということですね。
本来はそれはSQLの領分ではない、ということをご理解の上、以下をお試しください(たしか10gですよね)。

SELECT
CASE WHEN (ROW_NUMBER() OVER (PARTITION BY 担当 ORDER BY 商品, 売上品))=1 THEN 担当 END,
商品, 売上品 FROM TableName
WHERE 担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '竹輪') AND
担当 IN (SELECT 担当 FROM TableName WHERE 売上品 = '胡瓜') AND
売上品 IN ('竹輪','胡瓜')
ORDER BY 担当,商品,売上品

投稿日時 - 2008-08-05 09:25:17

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>DISTINCTだと一つの行しか見えなくなってしまいます
の意味がよくわかりませんね。。
書かれているデータに対し、書かれているクエリを実行すると、
_____担当_____商品_____売上品
_____XXXX_____1111______竹輪
_____XXXX_____1111______胡瓜
_____XXXX_____3333______竹輪
_____XXXX_____3333______胡瓜
こうなりますね?これをどうしたいか教えてください。
ちなみに、GROUP BYとORDER BYは併用可能です(GROUP BYが先)。

投稿日時 - 2008-08-05 01:27:22

補足

担当のXXXXの4つレコードが重複してしまうのでXXXXを1つのみ表示にしたいんです。

投稿日時 - 2008-08-05 07:33:38

あなたにオススメの質問