【问题标题】:Oracle 10g Select in QueryOracle 10g 在查询中选择
【发布时间】:2012-11-17 01:28:10
【问题描述】:

我想制定一个返回 vincustomer_idmodel_id 的查询,其中 same customer_id 具有 多个 记录,这些记录具有model_id 来自 CAR 表中的“toyota”。主键中的vin 是唯一的。有任何想法吗?我正在使用 Oracle 10g。

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

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    SQL Fiddle

    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
    

    Results

    |       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
    

    Results

    |       VIN | CUSTOMER_ID | MODEL_ID |
    --------------------------------------
    | 123232SSS |    cust1234 |   toyota |
    | 222313XYZ |    cust1234 |   toyota |
    

    【讨论】:

    • 当我在实时数据上运行该查询时,它似乎返回了除丰田以外的 model_id。
    • 从模型_id='toyota' 似乎已修复的汽车添加,如果您同意,请更新您的答案,我会接受。
    • 我的查询应该显示拥有多个丰田的所有客户,无论他们是否拥有其他任何东西。但如果你只想看丰田,那么是的,按型号过滤应该没问题
    猜你喜欢
    • 2011-03-11
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 2013-03-01
    • 1970-01-01
    相关资源
    最近更新 更多