繁体   English   中英

在单个查询中选择多个列值-Oracle

[英]Select multiple column values in single query - oracle

我有两个存储电子邮件信息的表:

  • 电子邮件
  • 电子邮件地址

电子邮件有:

  • 电子邮件ID
  • 时间戳
  • 和我们不关心的其他信息

EMAIL_ADDRESS具有:

  • ID(外键引用EMAIL.ID)
  • 电子邮件地址
  • TYPE(至,从)

假设我在EMAIL中有6行-查询应返回ID,时间戳记以及往返地址。

目前,我有这个:

SELECT ea.EMAIL_ADDRESS, e.ID, e.sent_date
FROM EMAIL_ADDRESS ea, CHANN_EMAIL e
WHERE e.ID=ea.id
AND ea.TYPE in ('to','from')

这将返回12行,其格式为:-to,ID,日期-from,ID,日期

该查询将是什么,所以我将有6行:-to,from,ID,date

您必须将EMAIL_ADDRESS表与两个视图区分开:

SELECT eat.EMAIL_ADDRESS as to ,ea.EMAIL_ADDRESS as from, e.ID, e.sent_date
FROM EMAIL_ADDRESS ea, CHANN_EMAIL e,EMAIL_ADDRESS eat
WHERE e.ID=ea.id and e.ID=eat.id
AND ea.TYPE in ('from') AND eat.TYPE in ('to')

尝试使用GROUP BY e.IDGROUP BY ea.id

样本数据:电子邮件表:

| email_id |     timestamp          |
-------------------------------
| 1        | 2014-02-14 17:30:32.803|
| 2        | 2014-02-24 17:30:32.803|

email_address表:

| id | email_add | type |
-------------------------
| 1  |d@gmail.com| to   |
| 1  |c@gmail.com| from |
| 2  |i@gmail.com| to   |
| 2  |k@gmail.com| from |

查询:

SELECT tab.email_id, MAX([to]) AS [to], MAX([from]) AS [from], MAX(tab.timestamp) AS [time] FROM
(SELECT e.email_id, 
CASE WHEN type= 'to' THEN ea.email_add ELSE NULL END AS [to],
CASE WHEN type= 'from' THEN ea.email_add ELSE NULL END AS [from], e.timestamp
FROM email e
INNER JOIN email_address ea
ON e.email_id = ea.id) tab
GROUP BY tab.email_id

结果:

|email_id|    to     |  from     |   time                |
----------------------------------------------------------
|   1    |d@gmail.com|c@gmail.com|2014-02-14 17:30:32.803|
|   2    |i@gmail.com|k@gmail.com|2014-02-24 17:30:32.803|        

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM