Перестановка таблицы SQL - PullRequest
0 голосов
/ 07 ноября 2019

Я хотел бы извлечь данные из таблицы SQL не так, как она определена:

В таблице t_Plants есть два столбца, в которых первый столбец является идентификатором гидрогенератора, а второй столбец относится к нижестоящему гидрогенератору. ID.

Plant_ID    Downstream_ID
1           3
2           3
3           4
4           6
5           6
6           NULL

Я хотел бы написать запрос, который даст мне вышестоящему генератору следующий вывод (поскольку возможно, что имеется более 1 вышестоящих резервуаров, UpStream_Lkup представляет собой некий список:

Plant_ID     UpStream_Lkup    
 3            1,2    
 4            3   
 6            4,5

Спасибо за помощь

1 Ответ

1 голос
/ 07 ноября 2019

Похоже, вам требуется агрегация и конкатенация строк:

select Downstream_ID as Plant_ID,
       string_agg(Plant_Id, ',') within group (order by Plant_Id) as UpStream_Lkup
from t_plants p
where Downstream_ID IS NOT NULL 
group by Downstream_ID;

Примечание: string_agg() - это новая функция в SQL Server. В старых версиях вам нужно будет использовать версию XML:

select dp.Downstream_ID,
       stuff( (select concat(',', p.Plant_Id) 
               from t_plant p
               where p.Downstream_ID = dp.Downstream_ID
               for xml path ('')
              ), 1, 1, ''
            ) as UpStream_Lkup
from (select distinct p.Downstream_ID
      from t_Plants p
     ) dp;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...