Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

group_concat trong SQL Server 2012 với ORDER BY cột khác

Tôi không chắc liệu điều này có nhanh hơn không, nhưng đây là phiên bản thay thế mà bạn không tham gia khi mua purchases hai lần trong 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;

Xem SQL Fiddle với Demo

Kết quả:

| 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. Tạo bảng bằng cách sử dụng câu lệnh tạo bảng rõ ràng so với chọn vào

  2. Làm cách nào để giữ lại các thẻ CDATA khi lưu trữ các kết quả truy vấn trong một biến Xml?

  3. Cách chuyển đổi nvarchar sang thập phân trong SQL

  4. Nhận chi tiết tài khoản dịch vụ của dịch vụ đại lý SQL

  5. đặt một biến với giá trị trả về của một truy vấn