Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

group_concat в SQL Server 2012 с ORDER BY друга колона

Не съм сигурен дали това ще бъде по-бързо, но ето алтернативна версия, в която не се присъединявате към покупки два пъти в STUFF() :

изберете customer_id, min(purchased_at) като first_purchased_at, неща ((изберете ',' + p2.product from ( select product, customer_id, ROW_NUMBER() over(partition by customer_id, product order by purchased_at) rn, ROW_NUMBER() over(разделяне по customer_id поръчка по purchased_at) rnk от покупки ) p2 където p2.customer_id =p1.customer_id и p2.rn =1 група по p2.product, rn, rnk поръчка по rnk за XML PATH('') ), 1,1,'') AS all_purchased_products от p1group покупки от customer_id; 

Вижте SQL Fiddle с демонстрация

Резултат:

<предварителен код>| КЛИЕНТ_ID | FIRST_PURCHASED_AT | ВСИЧКИ_ЗАКУПЕНИ_ПРОДУКТИ |------------------------------------------------ ----------------------------| 1 | 01 юни 2012 г. 00:00:00+0000 | ябълки, круши || 2 | 01 юни 2012 г. 00:00:00+0000 | ябълки || 3 | 02 септември 2012 г. 00:00:00+0000 | круши, ябълки, банани |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съхранената процедура връща множество набори от резултати

  2. DateTime от .NET към smalldatetime в SQL - как да правя заявки?

  3. Неправилен синтаксис близо до ')', извикващ съхранена процедура с GETDATE

  4. Групирано агрегиране на низове / LISTAGG за SQL Server

  5. sql сървър 'in' или 'or' - кое е най-бързото