查询具有相同id但不同值的数据oracle

时间:2016-10-19 06:28:04

标签: sql oracle join

我有两张这样的表

Person_table
| person_id | name   | surname 
--------------------------------        
     1      | name1  | surname1
--------------------------------
     2      | name2  | surname2
--------------------------------
     3      | name3  | surname3


    insurance_table

   ins_id |person_id | insurance_type |
  -------------------------------------
    001  |    1      |     5%         |
  -------------------------------------
    002  |    1     |     10%        |
  -------------------------------------
    003  |    3      |     2%         |

加入后如下

select pt.*, it.insurance_type
from person_table pt 
   join insurance_table it on it.person_id=pt.person_id 

查询返回person_id = 1的重复行。 像这样

    |  person_id  | person_name | insurance_type |
    ----------------------------------------------
    |    1        |  name1      |    5%          |
   -----------------------------------------------
    |    1        |  name1      |    10%         |

重点是根据保险类型为每个id返回一行,并添加其他列,如此

|  person_id  | person_name |   type 1  |  type2   |   type3  |
----------------------------------------------------------------------------
     1        |  name1      |    5%     |  10%     |   null   |
----------------------------------------------------------------------------  
     2        |  name2      |    null   |  null    |    2%    |  

是否可以在不编写pl过程的情况下实现这样的查询。 非常感谢!

3 个答案:

答案 0 :(得分:1)

如果我理解,您希望获得不同类型保险的人。如果我们只有3种类型,它看起来像你需要简单的解码

extension Int {
    enum Kind {
        case negative, zero, positive
    }
    var kind: Kind {
        switch self {
        case 0:
            return .zero
        case 1...Int.max:
            return .positive
        default:
            return .negative
        }
    }
}

答案 1 :(得分:0)

如果id = 1的人只在表“insurance_table”中存在一次,则查询结果与id = 1的人的记录不一致。

如果您的insurance_table只有2列(person_id和insurance_type),则无法使用3种类型生成结果。 如果此表有第三列,那么您可以使用union语句,并为每个查询另外使用insurance_table的where子句。

答案 2 :(得分:0)

好的,那是我怎么做的:

$dt = new DateTime('2016-10-16T22:12:45.104Z');
$helper = $dt->format('u'); //this is factor of 1000 off
$helper /= 1000 
$ans = $dt->format('Y-m-d\TH:i:s'); //get the first part of what you
$ans .= "." . $helper . "Z"; //add the milliseconds back on, and Z for good measure

echo $ans . "\n";

我不知道的是,百分比是否属于"属性"保险或"名称" /"密钥"保险类型(在后一种情况下,我不需要添加" ins_id"列。)