如何通过ID在一个表中联接2行

时间:2019-05-17 07:24:23

标签: sql oracle

我需要对同名(具有相同名称和不同的personal_identidy_code的人)进行统计。我想将2行或更多行合并为1行,以便可以比较数据与CASE语句。

可以说,我有这样的查询输出:

function a(fromDateTime,toDateTime){
    var fromTimestamp = new Date(fromDateTime).getTime()
    var toTimestamp = new Date(toDateTime).getTime()
    if (fromTimestamp > toTimestamp) {
        console.log("xxxxx")
        return
    }
}

具有相同activityNR的行可能会多于2行(activityName可以不同)。我的输出中有1个以上的活动。我需要比较一下,如果在活动Nr 111中有同名的人,但是个人身份代码不同。 我有将这些行合并为一个主意的想法,所以我的输出是这样的:

acitivityNR  acitivityName  Personal_identity_code    Name
111             test             00000000001          hello wor
111             test2            00000000002          hello wor
111             test2            00000000002          hello wor
222             asd              11111111111          my name
222             asd2             11111111112          my name

然后从那里我可以使用CASE语句过滤掉其中code = code2 = code3

的输出。

这就是我所拥有的,有些地方也有句子,但是那现在不重要了。

acitivityNR = aNR
acitivityName = aName
Personal_identity_code = code

aNR Aname Code         Name       Code2     Name2      Code3      Name3
111 test 00000000001 hello wor 00000000002 hello wor 00000000002 hello wor
222 asd  11111111111 my name   11111111112  my name

1 个答案:

答案 0 :(得分:1)

select a1.activityNR, a1.activityName, a1.prsonal_identity_code,
       a2.activityName, a2.prsonal_identity_code
from activitys a1
  inner join activitys a2 on a1.acitivityNR = a2.acitivityNR
where a1.prsonal_identity_code <> a2.prsonal_identity_code

这将为您提供如下结果:

aNR Aname Code         Name       Code2     Name2
111 test 00000000001 hello wor 00000000002 hello wor
111 test 00000000001 hello wor 00000000002 hello wor
222 asd  11111111111 my name   11111111112  my name