使用sql inner join / union来组合同一个表中的数据

时间:2014-08-07 11:22:41

标签: sql join

我有一个名为Registration的表,里面有4个字段。候选人ID,日期,AMPM,注册。

表格中包含的数据如下

123, 6/7/2014, AM, /
123, 6,7,2014, PM, \
125, 6,7,2014, AM, /
125, 6,7,2014, PM. P
123, 7,7,2014, AM, I
123, 7,7,2014, PM, \
124, 7,7,2014, PM, \

我有一个查询,它为每个候选人提取数据,命令最新的日期降序。

Select CandidateID, "Date", AMPM, Register
From Registration
WHERE CandidateID=CandidateID
ORDER BY "Date" DESC

但是我想更进一步,通过candidateID和date加入结果,所以我得到以下输出。

123, 6/7/2014, AM, /, PM, \
125, 6,7,2014, AM, /, PM, P
123, 7,7,2014, AM, I, PM, \
124, 7,7,2014,   ,  , PM, \

有人可以指出我正确的方向,不确定是否使用内部联接或联合。我想我需要在Where子句中添加和AMPM =“AM”来过滤早晨,但是如何让PM行显示在同一行上。

感谢所有回复

3 个答案:

答案 0 :(得分:1)

这是你想要实现的目标吗?

select A.CandidateID, A."DATE", A.AMPM, A.Register, B.AMPM, B.Register
from Registration as A
inner join Registration as B on A.CandidateID = B.CandidateID and A."Date" = B."Date"
  and A.AMPM = 'AM' and B.AMPM = 'PM'

另外:如果可能存在full outer的行而没有相应的AM(反之亦然),则需要PM加入。

答案 1 :(得分:0)

当我从你那里收集时,

选择R.CandidateID,R.Date,R.AMPM,R1.AMPM,R.Register from Registration R join Registration R1 on R.CandidateID = R1.CandidateID和R.Date = R1.Date 由R.Date desc命令

试着发布如何需要输出。

答案 2 :(得分:0)

@ OUByWyrostek建议的完整OUTER JOIN查询

select
 (CASE A.CandidateID IS NOT NULL THEN A.CandidateId ELSE B.CadidateId) CandidateId, 
 (CASE A."DATE" IS NOT NULL THEN A."DATE" ELSE B."DATE") RegisterDate,
 A.AMPM, 
 A.Register, 
 B.AMPM, 
 B.Register
FROM Registration A
OUTER JOIN Registration B ON A.CandidateID = B.CandidateID 
  and A."Date" = B."Date"
  and A.AMPM = 'AM' 
  and B.AMPM = 'PM'
ORDER BY RegisterDate DESC