0

を返すクエリを作成したいと思います。同じ場所にvin、テーブルの「toyota」を含む複数のレコードがあります。主キーにあり、一意です。何か案は?Oracle10gを使用しています。customer_idmodel_id customer_idmodel_idCARvin

CARテーブル:

vin varchar (primary key)
customer_id varchar
model_id varchar

データ:

vin        customer_id   model_id 
------------------------------------  
222313XYZ,   cust1234,   toyota
123232SSS,   cust1234,   toyota
111111ERE,   cust1111,   bmw
999999LKO,   cust1224,   bmw
4

1 に答える 1

1

SQL フィドル

Oracle 11g R2 スキーマのセットアップ:

CREATE TABLE car
    (vin varchar2(9), customer_id varchar2(8), model_id varchar2(6))
;

INSERT ALL 
    INTO car (vin, customer_id, model_id)
         VALUES ('222313XYZ', 'cust1234', 'toyota')
    INTO car (vin, customer_id, model_id)
         VALUES ('123232SSS', 'cust1234', 'toyota')
    INTO car (vin, customer_id, model_id)
         VALUES ('111111ERE', 'cust1111', 'bmw')
    INTO car (vin, customer_id, model_id)
         VALUES ('999999LKO', 'cust1234', 'bmw')
SELECT * FROM dual
;

クエリ 1 :所有者が複数のトヨタを所有しているすべてのモデルを表示する場合

select vin, customer_id, model_id from (
 select vin, customer_id, model_id, 
 count( decode(model_id, 'toyota', 1) ) over (partition by customer_id) cnt
  from car
)
where cnt > 1

結果

|       VIN | CUSTOMER_ID | MODEL_ID |
--------------------------------------
| 999999LKO |    cust1234 |      bmw |
| 222313XYZ |    cust1234 |   toyota |
| 123232SSS |    cust1234 |   toyota |

クエリ 2 : 所有者が複数のトヨタを所有しているトヨタのみを表示する場合:

select vin, customer_id, model_id from (
 select vin, customer_id, model_id, 
 count(*) over (partition by customer_id) cnt
  from car
 where model_id = 'toyota'
)
where cnt > 1

結果

|       VIN | CUSTOMER_ID | MODEL_ID |
--------------------------------------
| 123232SSS |    cust1234 |   toyota |
| 222313XYZ |    cust1234 |   toyota |
于 2012-11-16T17:08:23.640 に答える