まず、この質問(私の最初のstackoverflow)が重複していて、それを見つけることができなかった場合はお詫び申し上げます。私はまだロープを学ぶので、新しいブランドです。TSQL:複数の列に基づいて範囲を選択する方法
私は4列を持つテーブルを持っている:
C1 C2 C2 C4
-------------------
1 11 111 1111
1 11 222 1111
1 22 222 2222
1 22 444 2222
1 33 444 3333
2 22 333 2222
2 33 333 3333
2 33 333 4444
2 44 444 1111 -- start range
2 44 444 4444
3 11 111 2222
3 11 222 2222 -- end range
3 22 333 2222
3 22 444 2222
4 11 111 4444
4 11 222 1111
4 44 222 2222
4 44 333 1111
は、私が「範囲開始」と「終了範囲」外すべての行を選択するにはどうすればよいですか?
私がやっていることはこれですが、もっと良い方法があるのだろうか?
select * from Table1
where
-- start range
Col1 < 2
or
Col1 = 2 and Col2 < 44
or
Col1 = 2 and Col2 = 44 and Col3 < 444
or
Col1 = 2 and Col2 = 44 and Col3 = 444 and Col4 < 1111
-- end range
or
Col1 > 3
or
Col1 = 3 and Col2 > 11
or
Col1 = 3 and Col2 = 11 and Col3 > 222
or
Col1 = 3 and Col2 = 11 and Col3 = 222 and Col4 > 2222
すべての「または」条件をすべて回避する方法があるかどうかは、私が後にしていることを明確にしたいと思います。 MySQLのようなものをとそれをん:また、追加のポイントのカップル
where (Col1, Col2, Col3, Col4) < (2, 44, 444, 1111) or (Col1, Col2, Col3, Col4) > (3, 11, 222, 2222)
:
- 4列は、ユニークな組み合わせ(すべて 4列の上に主キーを想像)です。
- 私はテーブルの構造を制御できません。これは私が を取得するものです。
- 列の数は任意です(私はTSQL
をプログラムで生成する必要があります)。 - 私が示したデータは、質問のためのものです。 実際のデータはより複雑です。
以外だろう、私は多分あなたは、あなたが別の列にわたって単一の番号ではなく断片を格納しているようなデータモデルを改善する必要があると思います。クエリを困難にすること以外にも、現在のデザインではインデックスを使用するのが難しくなる可能性があります。 –
Except演算子を使用することができます – Paparazzi
@Paparazzi Dangはそれに私を打ちました – djangojazz