sql >> Databasteknik >  >> RDS >> Sqlserver

group_concat i SQL Server 2012 med ORDER BY en annan kolumn

Jag är inte säker på om detta kommer att gå snabbare, men här är en alternativ version där du inte går med på purchases två gånger i 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;

Se SQL-fiol med demo

Resultat:

| 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. Sortera en MySQL-fråga med ORDER BY eller med PHP-sorteringsfunktioner

  2. SQL många till många väljer

  3. Hur ställer man in tidszon på postgresql jdbc-anslutning skapad av flyway?

  4. Infoga flera rader från R Dataframe i Oracle Database