Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

group_concat di SQL Server 2012 dengan ORDER BY kolom lain

Saya tidak yakin apakah ini akan lebih cepat, tetapi ini adalah versi alternatif di mana Anda tidak bergabung di purchases dua kali dalam 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;

Lihat SQL Fiddle dengan Demo

Hasil:

| 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. Menggunakan jumlah baris dari tabel sementara dalam loop sementara SQL Server 2008

  2. ROW_NUMBER Alternatif untuk SQL Server 2000

  3. Permintaan pada bidang datetime dengan milidetik memberikan hasil yang salah di SQL Server

  4. Permintaan SQL Server untuk menemukan semua izin/akses untuk semua pengguna dalam database

  5. Bagaimana saya bisa mengambil tabel dari prosedur tersimpan ke datatable?