#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