アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQLについて質問があります。
あるテーブルの項目が、倉庫名、商品名、在庫数量とあった場合、
違う倉庫にある同一商品が数件あったとします。
例えば、
 A倉庫 商品●● 10個
 B倉庫 商品●● 20個
 C倉庫 商品●● 5個
 A倉庫 商品×× 3個
 B倉庫 商品×× 15個
 C倉庫 商品×× 0個

上記のような場合、●●商品についてはどれも在庫が1個以上
あるので通常に3件取得したいのですが、××商品はC倉庫が在庫0個です。

上記の様に0個の件数が1件でもあったら、その商品については
取得しない様なSQL式を1発で組むことは可能でしょうか?
(上記の例の場合、●●商品3件のみ取得したい)

何故、SQL初心者で初歩的な質問で申し訳ありませんが
よろしくお願い致します。

A 回答 (3件)

(1)数量がゼロのデータが少なく、数量でNULL値を持つものがない。


(2)商品に索引が作成されている。
状況なら。


create table zaiko
(
souko char(1),
shohin nvarchar(1),
suryo int
)

create index idx_shohin on zaiko (shohin)

insert into zaiko values ( 'A', '●', 10 );
insert into zaiko values ( 'B', '●', 20 );
insert into zaiko values ( 'C', '●', 5 );
insert into zaiko values ( 'A', '×', 3 );
insert into zaiko values ( 'B', '×', 15 );
insert into zaiko values ( 'C', '×', 0 );


select * FROM ZAIKO
where zaiko.shohin
not in ( select shohin from zaiko where suryo = 0 )

という書き方が有効かも知れません。
    • good
    • 0

下記の様な書き方も出来ますね。

(テーブル名は仮に「在庫」としました)


SELECT * FROM 在庫 a
WHERE
NOT EXISTS (
SELECT * FROM 在庫 b WHERE a.商品名 = b.商品名 AND b.在庫数量 = 0
)


WHERE 句は「商品名が同じで在庫数量が0のデータが存在しない」という条件を表現しています。
    • good
    • 0
この回答へのお礼

ありがとうございました。
記述も色々ありますね。
勉強になります。

お礼日時:2010/12/13 09:14

こんばんは。



まぁ書き方はいろいろあるかと思いますが・・・、

SELECT 倉庫名, 商品名, 在庫数量
FROM テーブル A
WHERE EXISTS
(SELECT 商品名, SUM(1) AS FLAG_A, SUM(CASE WHEN 在庫数量 = 0 THEN 0 ELSE 1 END) AS FLAG_B
FROM テーブル B
WHERE A.商品名 = B.商品名
GROUP BY 商品名
HAVING FLAG_A = FLAG_B)

とか・・・。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
また、お礼が遅くなり申し訳ありません。

早速試してみます。
ありがとうございました。

お礼日時:2010/12/13 09:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す