【问题标题】:oracle sql query : Getting all entries in a table with the same ID as separate columnsoracle sql查询:获取具有相同ID的表中的所有条目作为单独的列
【发布时间】:2020-03-20 17:56:47
【问题描述】:

我有两张表...我们称它们为员工和电话列表,可以根据 emp_id 值加入。

employee 有一个emp_id, firstname, lastnamephonelist 有一个 emp_id, phonetype, phonenumber

员工可以拥有任意数量的电话号码。 phonetype 中有一个固定的值列表,但对于这个例子,我们只说“work”、“cell”、“home”。

我正在尝试生成查询以生成包含员工所有电话号码的报告。但是,他们希望每个员工一行,并且每个 phonetype/phonenumber 对出现在右侧。

因此,我试图生成一个查询来将这样的值列表组合在一起,其中每个员工都有一行数据。如果电话号码没有任何价值,它就只是空白。

FIRSTNAME, LASTNAME, WORKNUMBER, CELLNUMBER, HOMENUMBER

【问题讨论】:

  • 是否需要单独的列并不完全清楚。如果您可以摆脱字符串连接,请查看LISTAGG

标签: sql database oracle join report


【解决方案1】:

使用类似以下的内容:

SELECT e.FIRSTNAME,
       e.LASTNAME,
       wp.PHONENUMBER AS WORKNUMBER,
       cp.PHONENUMBER AS CELLNUMBER,
       hp.PHONENUMBER AS HOMENUMBER
  FROM EMPLOYEE e
  LEFT OUTER JOIN PHONELIST wp
    ON wp.EMP_ID = e.EMP_ID AND
       wp.PHONETYPE = 'work'
  LEFT OUTER JOIN PHONELIST cp
    ON cp.EMP_ID = e.EMP_ID AND
       cp.PHONETYPE = 'cell'
  LEFT OUTER JOIN PHONELIST hp
    ON hp.EMP_ID = e.EMP_ID AND
       hp.PHONETYPE = 'home'

此处使用可选(左外)联接,因为您无法确定每个人都有工作、手机和/或家庭电话号码。

【讨论】:

  • 完美。我在做连接,。但不知道你可以在连接中添加额外的子句......(试图在 where 部分中做这件事并搞砸了)
猜你喜欢
  • 2017-01-29
  • 2017-04-23
  • 2015-09-02
  • 2012-11-05
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
相关资源
最近更新 更多