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

Chuyển cột thành hàng bằng UNPIVOT

Bạn có thể dễ dàng tách YP chuỗi sử dụng LEFT() , RIGHT() , SUBSTRING() , v.v. Đề xuất của tôi sẽ là cách bạn xử lý UNPIVOT của mình . Có vẻ như bạn có nhiều cột để UNPIVOT vì vậy đề xuất của tôi có thể là triển khai SQL động để thực hiện truy vấn này. Bạn sẽ làm theo cách này:

declare @colsUnpivot varchar(max),
  @query  AS NVARCHAR(MAX),
  @cols  varchar(max)

select @colsUnpivot = stuff((select ','
                             +quotename(replace(C.name, 'Qty', ''))
         from sys.columns as C
         where C.object_id = object_id('yourtable') and
               C.name like 'Qty%'
         for xml path('')), 1, 1, '')

select @cols = stuff((select ','
                      +quotename(C.name) + ' as ' + replace(C.name, 'Qty', '')
         from sys.columns as C
         where C.object_id = object_id('yourtable') and
               C.name like 'Qty%'
         for xml path('')), 1, 1, '')

set @query 
  = 'select rowid, 
          left(YP, 1) YP,
          cast(right(YP, len(YP) - 1) as int) period,
          Val
     from
     (
        select rowid, ' + @cols + '
        from yourtable
     ) x1
     unpivot
     (
        val for YP IN (' + @colsUnpivot + ')
     ) u'

exec(@query)

xem SQL Fiddle với Demo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Biểu thức GROUP-BY phải chứa ít nhất một cột không phải là tham chiếu bên ngoài

  2. Truy vấn hàng top1 cập nhật SQL

  3. UNION so với DISTINCT về hiệu suất

  4. CURRENT_TIMESTAMP Ví dụ trong SQL Server (T-SQL)

  5. Đối tượng Nullable phải có giá trị # 2