2016-10-19 8 views
1

は、私は例えば、テーブルWhereを含むレコードをIFで選択する?

からいくつかのデータを抽出する必要があります。

+-------------+------------+-------------+------------+ 
| Code  | Progress | QTY  | Faulty  | 
+-------------+------------+-------------+------------+ 
| A   | 10   |  100 | 0  |     
+-------------+------------+-------------+------------+ 
| B   | 1   |  10  | 0  |     
+-------------+------------+-------------+------------+ 
| C   | 4   |  0  | 1  |     
+-------------+------------+-------------+------------+ 
| D   | 7   |  100 | 0  |     
+-------------+------------+-------------+------------+ 


SELECT Code, Progress, QTY, Faulty 
FROM myTable 
WHERE Progress <> 7 AND Progress = 4 AND QTY > 0 

がどのように を持つすべてのレコードを選択するには - 進歩<> 7 - と進捗4が、進歩と行の唯一のQTY forは0より大きい - Faultyの値は1ですか?

+0

現在のクエリを共有してください。あなたは私が推測する「IF」は必要ありません。 – 1000111

答えて

1

それは

SELECT 
Code, 
Progress, 
QTY, 
Faulty 
FROM myTable 
WHERE Progress NOT IN(4,7) 
     OR (Progress = 4 AND QTY > 0 AND Faulty = 1) 

説明をしてみてください教えてください:Progress = 4を持つレコードをもたらすでしょう

条件Progress <> 7のように。その特定のレコードにはQTY > 0 AND Faulty = 1が含まれていない可能性があります。

そのため、最初の条件としてProgress NOT IN (4,7)を使用してください。

ここで、あなたが言ったようなかなりまっすぐな2番目のケースについて心配する必要があります。 Progress = 4 having QTY >0 and Faulty = 1を持つ

(Progress = 4 AND QTY > 0 AND Faulty = 1)

レコードは、最終的な結果セットに持ち込まれます。

+0

これは動作しますが、進捗= 4、qty = 0のレコードを非表示にする必要があります。 ルールは次のとおりです。進捗状況が7以外のすべてのレコードを表示し、進行状況4とqty = 0のレコードを非表示 – Josef

+0

'progress = 4とQTY = 0は結果セットに現れてはならない。試した質問を共有してください。 – 1000111

+0

申し訳ありません、現在は動作しています。私のIDEの問題...すべてに感謝 – Josef

0
select * from table 
where Progress<>7 
and Progress in (select Progress from table t where QTY>0 and Faulty =1) 
関連する問題