SSMS
 sql >> Cơ Sở Dữ Liệu >  >> Database Tools >> SSMS

Cách xoay vòng mà không cần biết các cột cố định trong T-SQL

Bản trình diễn trên db <> fiddle

Bạn có thể sử dụng ROW_NUMBER() để đánh dấu số lượng giá trị, ví dụ:1, 2, 3 .

Lưu ý rằng :ORDER BY [Balance] DESC để nhận được giá trị được tạo như bạn muốn.

DECLARE 
    @columns NVARCHAR(MAX) = '',
    @sql     NVARCHAR(MAX) = '';


 SELECT Customer, Balance, Col = ROW_NUMBER() OVER (PARTITION BY Customer ORDER BY [Balance] DESC)
 into #b
 FROM #a

SELECT @columns += QUOTENAME(Col) + ','
from (SELECT DISTINCT Col FROM #b) A

-- remove the last comma
SET @columns = LEFT(@columns, LEN(@columns) - 1);


SET @sql = 'SELECT * FROM ( SELECT Customer, Balance, Col FROM  #b) src PIVOT( MAX([Balance]) FOR Col IN ('+ @columns +')) AS pivot_table;';

-- execute the dynamic SQL
EXECUTE sp_executesql @sql;

Đầu ra

Đã cập nhật

Kể từ khi nối các chuỗi không có tài liệu và không đáng tin cậy . Không phải lúc nào nó cũng hoạt động như mong đợi . Vì vậy bạn nên giải quyết bằng 2 giải pháp dưới đây

  1. Sử dụng STRING_AGG (Từ SQL Server 2017 trở về sau)
SELECT STRING_AGG(QUOTENAME(Col), ', ')
from (SELECT DISTINCT Col FROM #b) A
// Output: [1], [2], [3]
  1. Sử dụng Tiện ích mở rộng XML
DECLARE  @columns NVARCHAR(MAX) = ''
SELECT @columns = (
  SELECT QUOTENAME(Col) + ', '
  FROM (SELECT DISTINCT Col FROM #b) A

  FOR XML PATH(''), TYPE
                   ).value('.','varchar(max)')
SELECT @columns 
// Output: [1], [2], [3],

Cảm ơn bình luận của @ GarethD. Hãy khám phá trên db <> fiddle



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Truy vấn SQL So sánh các giá trị trong mỗi 15 phút và hiển thị kết quả mỗi giờ

  2. Quá nhiều giá trị tham số làm chậm truy vấn

  3. Kết nối SQL Server Management Studio mặc định là 'chính' khi chọn một đối tượng dành riêng cho cơ sở dữ liệu

  4. Tác vụ tập lệnh SSIS không thành công tập lệnh phiên bản 15.0?

  5. Cách xoay vòng mà không cần biết các cột cố định trong T-SQL