附加来自SQL中2个不同列的值

时间:2019-03-05 12:29:13

标签: sql oracle append

我有下表

enter image description here

我需要从2列中获取以下输出作为“ SVGFRAMXPOSLSVG”。 是否可以从2列获取此附加值

3 个答案:

答案 0 :(得分:0)

请尝试这个。

SELECT STUFF((
            SELECT  '' +   DEPART_AIRPORT_CODE + ARRIVE_AIRPORT_CODE
            FROM @tblName
            FOR XML PATH('')
            ), 1, 0, '')

答案 1 :(得分:0)

例如:-

Declare @tbl Table(
id INT ,
DEPART_AIRPORT_CODE   Varchar(50),
ARRIVE_AIRPORT_CODE  Varchar(50),

value varchar(50)
)

INSERT INTO @tbl VALUES(1,'g1','g2',NULL)
INSERT INTO @tbl VALUES(2,'g2','g3',NULL)
INSERT INTO @tbl VALUES(3,'g3','g1',NULL)

SELECT STUFF((
            SELECT  '' +   DEPART_AIRPORT_CODE + ARRIVE_AIRPORT_CODE
            FROM @tbl
            FOR XML PATH('')
            ), 1, 0, '')

答案 2 :(得分:0)

摘要

使用Analytic functionslistagg完成任务。

详细信息

创建两个code_idcode值的列表。将code_id值与相同的机场代码相匹配(旅客离开他们刚到达的同一机场)。使用laglead从其他行中获取值。在行程的开始和结束时,NULL会存在code_id个。默认将第一个NULL设置为0,将最后一个NULL设置为前一个code_id加1。将生成代码列表以及匹配的索引。将列表合并在一起,并使用union删除重复项。最后,使用无分隔符的listagg将行聚合到字符串值上。

with codes as
(
    select
    nvl(lag(t1.id) over (order by t1.id),0) as code_id,
    t1.depart_airport_code as code
    from table1 t1

    union

    select
    nvl(lead(t1.id) over (order by t1.id)-1,lag(t1.id) over (order by t1.id)+1) as code_id,
    t1.arrive_airport_code as code
    from table1 t1
)
select
listagg(c.code,'') WITHIN GROUP (ORDER BY c.code_id) as result
from codes c;

注意:该解决方案确实依赖于可用的整数id字段。否则,分析函数将没有要排序的列。如果id不存在,那么您将需要根据另一列(例如时间戳或确保行以正确顺序排列的另一个标识符)来制造一个。 在子查询或视图中使用row_number() over (order by myorderedidentifier) as id可以达到目的。 请勿使用rownum。它可能会给您带来意想不到的结果。如果没有ORDER BY子句,则不能保证同一查询每次都会返回相同的结果。

输出

|          RESULT |
|-----------------|
| SVGFRAMXPOSLSVG |