Добавить значения из 2 разных столбцов в SQL - PullRequest
0 голосов
/ 05 марта 2019

У меня есть следующая таблица

enter image description here

Мне нужно получить следующий вывод в виде "SVGFRAMXPOSLSVG" из 2 столбцов.Можно ли получить это добавленные значения из 2 столбцов

Ответы [ 3 ]

0 голосов
/ 06 марта 2019

Например: -

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, '')
0 голосов
/ 06 марта 2019

Резюме

Используйте Аналитические функции и listagg, чтобы выполнить работу.

Detail

Создать два списка значений code_id и code. Сопоставьте значения code_id для тех же кодов аэропортов (пассажиры вылетают из того же аэропорта, в который они только что прибыли). Использование lag и lead для получения значений из других строк. NULL s будет существовать в течение 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 |
0 голосов
/ 05 марта 2019

Пожалуйста, попробуйте это.

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