Как объединить столбцы данных на основе другого столбца в SQL?

#sql #sql-server #sql-server-2008 #merge

#sql #sql-сервер #sql-server-2008 #слияние

Вопрос:

Я использую Microsoft SQL Server 2008 и хотел бы объединить некоторые столбцы на основе отдельного значения в другом столбце. Мой пример данных:введите описание изображения здесь

Ожидаемый результат: введите описание изображения здесь

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

1. Ожидаемый результат — подробный CSV-файл, который является довольно грубым способом хранения данных в таблице SQL. Это просто презентация, или вы планируете на самом деле хранить этот CSV?

2. Данные хранятся в таблице SQL. Я использую csv только для предоставления примеров данных.

Ответ №1:

Это сложно в SQL Server 2008 — вы должны обновить свое программное обеспечение! Срок его службы подходит к концу.

Метод использует XML:

 select s.style,
       stuff( (select ','   convert(varchar(255), curr)
               from (select t.*,
                            row_number() over (partition by t.style order by (select null)) as rowid
                     from t
                    ) t cross apply
                    (values (GPB, 1), (EUR, 2), (USD, 3), (AUD, 4)
                    ) v(curr, ord)
               where t.style = s.style
               order by rowid, ord
               for xml path ('')
              ), 1, 1, '') as currencies
from (select distinct style from t) s;
  

order by хранит все значения из одной строки вместе и упорядочивает значения по столбцам.

Ответ №2:

 SELECT
    t1.Style,

    ProductIDs = STUFF((
        SELECT ', '   t2.ProductIDs 
        FROM TableName t2
        WHERE t1.Style= t2.Style
        FOR XML PATH('')
    ),1, 2, '')
FROM TableName t1
GROUP BY t1.Style