0

SQL スクリプトのヘルプが必要です。

列のあるordersテーブルがあり、クライアントごとに範囲を格納するcard_number別のテーブルがあり、アクティブかどうかにフラグを付ける列があります。card_rangecard_number

テーブルからデータを選択するときに、非アクティブなすべての範囲をorders除外したいcard_number

例えば。ordersテーブル

order_id   card_number
1          101
2          102
3          201
4          301

card_rangeテーブル、アクティブ 0 = いいえ、1 = はい

start_card_number end_card_number active
101               199             0
201               299             1
301               399             0

したがって、注文テーブルから返したい唯一のデータは

order_id card_number
3        201

私が理解しようとしているスクリプトは、card_rangeテーブルを介したループです...ありがとう

4

1 に答える 1

1

カードの範囲が重複しないと仮定すると、次のようになります。

declare @orders as table ( order_id int, card_number int )
insert into @orders ( order_id, card_number ) values
  ( 1, 101 ), ( 2, 102 ), ( 3, 201 ), ( 4, 301 )

declare @card_range as table ( start_card_number int, end_card_number int, active bit )
insert into @card_range ( start_card_number, end_card_number, active ) values
  ( 101, 199, 0 ), ( 201, 299, 1 ), ( 301, 399, 0 )

select order_id, card_number
  from @orders as o inner join
    @card_range as cr on
      cr.start_card_number <= o.card_number and o.card_number <= cr.end_card_number and
      cr.active = 1
于 2012-10-11T01:28:28.413 に答える