Объедините несколько строк в одну строку в одной таблице

#sql-server

#sql-сервер

Вопрос:

У меня есть таблица, содержащая несколько страховых полисов для каждого клиента, которая содержит

Порядок (первичный, вторичный и т. Д. До 9 возможных страховых полисов)

Мне нужна одна строка для каждого клиента, содержащая все страховые полисы клиента в порядке важности.

например:

   Client, Order, Company, Number, Start,    End, Co-Pay, Active?
  1       1      BCBS     12345   1/1/2019       $10     Active
  1       2      Medicare X21Y52  2/1/2018               Active
  1       6      Self-Pay    
  2       6      Medicare X21Y52  2/1/2018               Active
  2       8      Self-Pay    
  

Мне нужна одна строка для каждого клиента с данными для каждой активной политики

 1,1,BCBS,12345,1/1/2019,,$10,Active,2,Medicare,X21Y52,2/1/2018,,,Active,6,Self-Pay,,,,,  
2,6,Medicare,x22y22,7/1/2002,,,Active,8,Self-Pay,,,,,,    
  

Как я могу закодировать, чтобы получить желаемый результат.

Существует не более 9 ссылок на политику

Требуются только активные политики

Комментарии:

1. Изменил мое требование, поэтому я не использовал результат XML. Аналогично коду, который я использовал в другом вопросе Спасибо за вашу помощь

Ответ №1:

Поскольку вы не опубликовали свою схему, я просто делаю некоторые предположения о типе данных. Обратите внимание, что перед конкатенацией необходимо преобразовать в строку

 select  t.Client, stuff(csv, 1, 1, '')
from    (
            select  distinct Client
            from    a_table t
        ) t
        cross apply
        (
            select  ','   coalesce(x.Company, '')  
                    ','   coalesce(x.Number, '')  
                    ','   coalesce(convert(varchar(10), [Start], 121), '')  
                    ','   . . . 
            from    a_table x
            where   x.Client    = t.Client
            and     x.Active    = 'Active'
            order by [Order]
            for xml path ('')
        ) c (csv)