Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

group_concat w SQL Server 2012 z inną kolumną ORDER BY

Nie jestem pewien, czy będzie to szybsze, ale tutaj jest alternatywna wersja, w której nie dołączasz do purchases dwa razy w 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;

Zobacz Skrzypce SQL z wersją demonstracyjną

Wynik:

| 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmiana kolumny nvarchar na format daty

  2. Tabela przestawna i konkatenacja kolumn

  3. Znajdź wartość w dowolnym miejscu w bazie danych

  4. Uzyskaj identyfikator obiektu z jego nazwy w SQL Server:OBJECT_ID()

  5. Wybór procesora dla SQL Server 2012