2017-09-22 16 views
0

まず、この質問(私の最初の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
    をプログラムで生成する必要があります)。
  • 私が示したデータは、質問のためのものです。 実際のデータはより複雑です。
+0

以外だろう、私は多分あなたは、あなたが別の列にわたって単一の番号ではなく断片を格納しているようなデータモデルを改善する必要があると思います。クエリを困難にすること以外にも、現在のデザインではインデックスを使用するのが難しくなる可能性があります。 –

+1

Except演算子を使用することができます – Paparazzi

+0

@Paparazzi Dangはそれに私を打ちました – djangojazz

答えて

0

私は、オペレータ(パパラッチがすでに述べたように)

Select * 
from YourTable 
Except 
select * 
from YourTable 
where (C1 = 2 and C2 >= 44 and C3 >= 444 and C4 >= 1111) 
    or (C1 = 3 and C2 >= 11 and C3 <= 222 and C4 <= 2222) 
+0

返事ありがとう、私はこの場合に動作するC1とC2だけをチェックすることがわかります。明確にするには、範囲が(3、11、333、2222)になり、選択されるはずのすべての列を次の行としてチェックする必要があります。 – Francesco

+0

更新されました。実際に理解する問題は、「例外」の下にあるすべてのものを除外し、その上のセット全体を使用したいセットのために狩りをするべきです。資格に必要な述語を変更することができます。私はあなたが望むと思ったことのためにできるだけ短い述語を作っただけです。私はあなたのニーズを満たすために少し更新しました。 – djangojazz

関連する問題