sql >> Database >  >> RDS >> Sqlserver

group_concat in SQL Server 2012 met ORDER BY andere kolom

Ik weet niet zeker of dit sneller zal zijn, maar hier is een alternatieve versie waarbij je niet meedoet aan purchases twee keer in de STUFF() :

select customer_id,
  min(purchased_at) as first_purchased_at,
  stuff ((select ',' +  p2.product 
          from
          (
            select product, customer_id,
                ROW_NUMBER() over(partition by customer_id, product order by purchased_at) rn,
                ROW_NUMBER() over(partition by customer_id order by purchased_at) rnk   
            from purchases
          ) p2 
          where p2.customer_id = p1.customer_id
            and p2.rn = 1
          group by p2.product, rn, rnk
          order by rnk
          for XML PATH('') ), 1,1,'') AS all_purchased_products  
from purchases p1
group by customer_id;

Zie SQL Fiddle met demo

Resultaat:

| CUSTOMER_ID |               FIRST_PURCHASED_AT | ALL_PURCHASED_PRODUCTS |
---------------------------------------------------------------------------
|           1 |      June, 01 2012 00:00:00+0000 |           apples,pears |
|           2 |      June, 01 2012 00:00:00+0000 |                 apples |
|           3 | September, 02 2012 00:00:00+0000 |   pears,apples,bananas |



  1. Waarom is het gebruik van OPENQUERY op een lokale server slecht?

  2. SQL Server 2008 R2 HASHBYTES SHA2 retourneert null

  3. Hoe te combineren in de buurt van hetzelfde item door SQL?

  4. Laat je ontsteken door Apache Spark – Part 2