首先很抱歉,如果已经在其他地方回答了这个问题,我经过几天的搜索后仍无法找到答案。
有没有办法使用不同的列将两行合并为一行。
您将从下图中看到,该行是相同的,除了日期和位置,我要查找的是在下面的一行中有详细信息。其中日期列显示两次,具有不同的列名称,例如'日期发送到X位置'和'发送到Y位置的日期'。如果我们将正确的日期放在正确的列中,则不需要显示该位置,因为他们将从列名称中看到该位置。
到目前为止,我使用此查询,我不确定如何调整它来做我需要的?
select
l.lot_number,
trunc(l.start_tran_date) AS "Date sent to location",
l.location_id_2 AS "Location"
FROM t_tran_log l
WHERE
(l.location_id_2 = 'SENTTOMAP' OR l.location_id_2 = 'WAITINGFORCOLLECTION')
;
这就是我希望上面的结果看起来像:
答案 0 :(得分:1)
这将是我的方法:
1-创建测试表
create table MESSYLOG
(
lotn varchar(20),
datesent date,
location varchar(20)
);
insert into messylog values ('abc', '06-JUN-16', 'waiting');
insert into messylog values ('abc', '07-JUN-16', 'sent');
insert into messylog values ('def', '08-JUN-16', 'waiting');
insert into messylog values ('def', '10-JUN-16', 'sent');
--select * from MESSYLOG
2-写2个子查询
select t1.lotn,t2.DateWait, t1.DateSentmap,
from
(
select e.lotn, e.datesent as DateSentmap
from messylog e
where e.location = 'sent'
) t1
JOIN
(
select m.lotn, m.datesent as DateWait
from messylog m
where m.location = 'waiting'
)t2
on t1.lotn = t2.lotn
3-结果集
LOTN DATEWAIT DATESENTMAP
abc 06-JUN-16 07-JUN-16
def 08-JUN-16 10-JUN-16
答案 1 :(得分:0)
如果某个地段的某个地点只有一个日期,可以尝试这样的事情:
SELECT lot_number
,MAX(CASE WHEN location_id = 'WAITINGFORCOLLECTION' THEN start_tran_date) ELSE NULL END) AS "Date waiting for collection"
,MAX(CASE WHEN location_id = 'SENTTOMAP' THEN start_tran_date) ELSE NULL END) AS "Date sent to map"
FROM t_tran_log
GROUP BY lot_number
汇总函数(MAX
)将跳过NULL
列值,只留下该位置的单个值。