トップ回答者
select 文について教えてください

質問
-
SQL Server 2005 を使用しています。
以下の商品テーブルがあります。NUMには主キーありです。select 文を発行して
NUM の最後に A が付いているデータ(類似のデータは無視)と
A が付いていないデータを取得するには どのような select 文を書けば
よいのでしょうか? お教えください。テーブル名:商品
NUM 商品Index 本体 定価 以降省略
0-001 100-0020 1000 1050
0-002 100-0030 2000 2100
0-003 100-0040 3000 3150 (これ以降 下のデータと同じとは限らない)
0-003A 100-0040 3000 3150 (これ以降 上のデータと同じとは限らない)
0-004 100-0050 1500 1575
0-005 100-0060 2500 2625
0-005A 100-0060 2500 2625
0-006 100-0070 1000 1050希望する結果
0-001 100-0020 1000 1050
0-002 100-0030 2000 2100
0-003A 100-0040 3000 3150
0-004 100-0050 1500 1575
0-005A 100-0060 2500 2625
0-006 100-0070 1000 1050
回答
-
答えを直接書くしかないのかなぁ…。IN / NOT INを使うことで一覧に含まれるもの/含まれないものを検索できます。これがわかれば、Aが付いている一覧+Aが付いていない一覧をUNIONでつなぎ合わせるだけです。
-- Aが付いている一覧 SELECT NUM, 商品index, 本体, 定価 FROM 商品 WHERE NUM LIKE '%A' -- Aが付いている一覧のNUMから末尾の1文字'A'を取り除いたもの SELECT SUBSTRING(NUM, 0, LEN(NUM)-1) FROM 商品 WHERE NUM LIKE '%A' -- Aが付いていない一覧 SELECT NUM, 商品index, 本体, 定価 FROM 商品 WHERE NUM NOT LIKE '%A' AND NUM NOT IN (SELECT SUBSTRING(NUM, 0, LEN(NUM)-1) FROM 商品 WHERE NUM LIKE '%A') -- Aが付いている一覧と付いていない一覧 SELECT NUM, 商品index, 本体, 定価 FROM 商品 WHERE NUM LIKE '%A' UNION ALL SELECT NUM, 商品index, 本体, 定価 FROM 商品 WHERE NUM NOT LIKE '%A' AND NUM NOT IN (SELECT SUBSTRING(NUM, 0, LEN(NUM)-1) FROM 商品 WHERE NUM LIKE '%A')
- 回答としてマーク mcioh 2012年8月1日 8:22
すべての返信
-
答えを直接書くしかないのかなぁ…。IN / NOT INを使うことで一覧に含まれるもの/含まれないものを検索できます。これがわかれば、Aが付いている一覧+Aが付いていない一覧をUNIONでつなぎ合わせるだけです。
-- Aが付いている一覧 SELECT NUM, 商品index, 本体, 定価 FROM 商品 WHERE NUM LIKE '%A' -- Aが付いている一覧のNUMから末尾の1文字'A'を取り除いたもの SELECT SUBSTRING(NUM, 0, LEN(NUM)-1) FROM 商品 WHERE NUM LIKE '%A' -- Aが付いていない一覧 SELECT NUM, 商品index, 本体, 定価 FROM 商品 WHERE NUM NOT LIKE '%A' AND NUM NOT IN (SELECT SUBSTRING(NUM, 0, LEN(NUM)-1) FROM 商品 WHERE NUM LIKE '%A') -- Aが付いている一覧と付いていない一覧 SELECT NUM, 商品index, 本体, 定価 FROM 商品 WHERE NUM LIKE '%A' UNION ALL SELECT NUM, 商品index, 本体, 定価 FROM 商品 WHERE NUM NOT LIKE '%A' AND NUM NOT IN (SELECT SUBSTRING(NUM, 0, LEN(NUM)-1) FROM 商品 WHERE NUM LIKE '%A')
- 回答としてマーク mcioh 2012年8月1日 8:22