答案 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 functions和listagg
完成任务。
详细信息
创建两个code_id
和code
值的列表。将code_id
值与相同的机场代码相匹配(旅客离开他们刚到达的同一机场)。使用lag
和lead
从其他行中获取值。在行程的开始和结束时,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 |