2016-07-08 5 views
-1

У меня есть таблица, которая выглядит какЛучший способ конкатенации значений столбцов в совокупности

srvc_dt  fclity_id clmt_key rfrsh_dt srvc_cd 
2013-01-16 000167404 2  2013-01-31 01204 
2013-01-16 000167404 2  2013-01-31 11112 
2011-01-11 000167404 2488 2013-02-28 11113 
2013-01-08 000167404 6070 2013-01-31 11113 
2013-01-08 000167404 28371 2013-01-31 01202 
2013-01-08 000167404 28371 2013-01-31 11107 
2013-01-08 000167404 28371 2013-01-31 11112 
2013-01-08 000167404 28371 2013-01-31 11117 
2013-01-08 000167404 28371 2013-01-31 12101 
2012-07-17 000167404 40571 2013-01-31 11113 
2012-11-19 000167404 40571 2013-01-31 11113 
2013-01-14 000167404 44189 2013-01-31 27211 
2010-07-06 000167404 46396 2013-02-28 01202 
2010-07-06 000167404 46396 2013-02-28 02142 
2010-07-06 000167404 46396 2013-02-28 11107 
2010-07-06 000167404 46396 2013-02-28 11112 
2013-01-03 000167404 113264 2013-01-31 01204 
2013-01-03 000167404 113264 2013-01-31 23323 
2013-01-07 000167404 113390 2013-01-31 01202 
2013-01-07 000167404 113390 2013-01-31 02142 

, и я хотел бы, чтобы превратить его в нечто вроде

srvc_dt  fclity_id clmt_key rfrsh_dt  srvc_cd 
2010-07-06 000167404 46396 2013-02-28 01202,02142,11107,11112 
2011-01-11 000167404 2488 2013-02-28 11113 
2012-07-17 000167404 40571 2013-01-31 11113 
2012-11-19 000167404 40571 2013-01-31 11113 
2013-01-03 000167404 113264 2013-01-31 01204,23323 
2013-01-07 000167404 113390 2013-01-31 01202,02142 
2013-01-08 000167404 6070 2013-01-31 11113 
2013-01-08 000167404 28371 2013-01-31 01202,11107,11112,11117,12101 
2013-01-14 000167404 44189 2013-01-31 27211 
2013-01-16 000167404 2  2013-01-31 01204,11112 

, что будет наиболее производительным (для > 100 000 000 строк), чтобы выполнить это в SQL SERVER 2012?

PIVOT? FOR XML PATH? динамические заявления о случаях? что-то еще?

EDIT: в то время как Simulating group_concat MySQL function in Microsoft SQL Server 2005? делает дисплей 1 способ сделать это, я ищу для сравнения производительности между различными методами

+0

Об этом ответили здесь, а остальная часть Интернета - сотни, если не тысячи раз. PIVOT НЕ поможет, потому что он преобразует сгруппированные данные в столбцы, которые не то, что вы хотите. Метод FOR XML - это то, что вы хотите. –

+0

Возможный дубликат [Имитация группы \ _concat MySQL-функция в SQL Server?] (Http://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in-sql-server) –

+0

@SeanLange Я читаю этот другой вопрос перед публикацией, а в то время как FOR XML PATH БЫЛО выполнить это, я считаю, что это очень дорогостоящая техника. PIVOT также может реально сделать это, как только у вас есть сгруппированные данные в столбцы, вы можете объединить их – Traceur

ответ

1

Grouped Concatenation in SQL Server по Aaron Bertrand предлагает хороший взгляд на то, что вы хотите.

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

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

+0

спасибо за ваш ответ, я согласен с тем, что в конечном итоге мне придется самому его протестировать, но цель моего вопроса состояла в том, чтобы лучше понять, какие варианты У меня есть и их преимущества/недостатки, которые объясняются в приведенной ссылке. – Traceur

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