2016-11-08 3 views
0

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

Я смотрел на этот сайт и нашел способы объединения нескольких строк в одну колонку, однако, что я после немного больше заказ, пожалуйста, помогите ...

У меня есть две таблицы - один список людей и деталей о них, таких как имя и т. д. и ссылка на человека.

Второй содержит ряд предупреждений о человеке, у одного человека может быть несколько предупреждений. Это будет содержать ссылку на человека и тип предупреждения, которое они имеют в строке.

Я хочу присоединиться к этим двум таблицам, используя внутреннее соединение на ссылке человека. Затем я хочу найти все предупреждения для каждого человека и объединить их в строку и показать это как столбец «Все оповещения».

Так что я в конечном итоге следующий вывод:

First Name | Surname | All Alerts 
-----------+---------+--------------------------  
Tony  | Stark | Alert 1, Alert 2, Alert 3 

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

Я потратил на это день и рассмотрел решения XMLPath и использовал CTE, CROSS APPLY и подзапросы, чтобы указать предложение where. Я немного потерял.

DECLARE @ConcatenatedVals VARCHAR (255) 

SET @ConcatenatedVals = 
    (
     DECLARE @AllAlerts VARCHAR(8000) 

     SELECT @AllAlerts = COALESCE(@AllAlerts + ', ', '') + personAlert 
     FROM Alerts 

     SELECT @AllAlerts AS 'All Alerts' 
    ) 

ответ

0

Я нашел решение для этого размещен здесь:

https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/#Toc205129480

Это ссылка решение Адам Machanic

Кроме того, материал фактически является функцией, не видел этого раньше:

SELECT p1.CategoryId, материал ((SELECT ',' + ProductName FROM Northwind.dbo.Products p2 WHERE p2.CategoryId = p1.CategoryId ORDER BY ProductName FOR XML PATH (''), TYPE) .value ('.', 'Varchar (max)') , 1,1, '') AS Продукты FROM Northwind.dbo.Products p1 GROUP BY CategoryId;

Смежные вопросы