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

SQL Server - PIVOT - hai cột thành hàng

Có một số cách khác nhau để bạn có thể đạt được kết quả như ý muốn. Tương tự với @Sheela K R's câu trả lời là bạn có thể sử dụng hàm tổng hợp với biểu thức CASE nhưng nó có thể được viết theo cách ngắn gọn hơn:

select 
  max(case when rowid = 1 then first end) First1,
  max(case when rowid = 1 then last end) Last1,
  max(case when rowid = 2 then first end) First2,
  max(case when rowid = 2 then last end) Last2,
  max(case when rowid = 3 then first end) First3,
  max(case when rowid = 3 then last end) Last3,
  max(case when rowid = 4 then first end) First4,
  max(case when rowid = 4 then last end) Last4,
  max(case when rowid = 5 then first end) First5,
  max(case when rowid = 5 then last end) Last5
from yourtable;

Xem SQL Fiddle with Demo .

Điều này cũng có thể được viết bằng cách sử dụng hàm PIVOT, tuy nhiên, vì bạn muốn xoay nhiều cột nên trước tiên bạn sẽ muốn xem xét việc giải nén First của mình và Last cột.

Quá trình bỏ chia sẻ sẽ chuyển đổi nhiều cột của bạn thành nhiều hàng dữ liệu. Bạn không chỉ định phiên bản SQL Server bạn đang sử dụng nhưng bạn có thể sử dụng SELECT với UNION ALL với CROSS APPLY hoặc thậm chí là UNPIVOT chức năng thực hiện chuyển đổi đầu tiên:

select col = col + cast(rowid as varchar(10)), value
from yourtable
cross apply 
(
  select 'First', First union all
  select 'Last', Last
) c (col, value)

Xem SQL Fiddle with Demo . Điều này chuyển đổi dữ liệu của bạn sang định dạng:

|    COL |       VALUE |
|--------|-------------|
| First1 | RandomName1 |
|  Last1 | RandomLast1 |
| First2 | RandomName2 |
|  Last2 | RandomLast2 |

Khi dữ liệu ở nhiều hàng, bạn có thể dễ dàng áp dụng hàm PIVOT:

select First1, Last1, 
  First2, Last2,
  First3, Last3, 
  First4, Last4, 
  First5, Last5
from
(
  select col = col + cast(rowid as varchar(10)), value
  from yourtable
  cross apply 
  (
    select 'First', First union all
    select 'Last', Last
  ) c (col, value)
) d
pivot
(
  max(value)
  for col in (First1, Last1, First2, Last2,
              First3, Last3, First4, Last4, First5, Last5)
) piv;

Xem SQL Fiddle with Demo

Cả hai đều cho kết quả là:

|      FIRST1 |       LAST1 |      FIRST2 |       LAST2 |      FIRST3 |       LAST3 |      FIRST4 |       LAST4 |      FIRST5 |       LAST5 |
|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|
| RandomName1 | RandomLast1 | RandomName2 | RandomLast2 | RandomName3 | RandomLast3 | RandomName4 | RandomLast4 | RandomName5 | RandomLast5 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm group_concat SQL trong SQL Server

  2. Triển khai Tìm kiếm Toàn văn trong SQL Server 2016 cho Người dùng Nâng cao

  3. Thêm cột bảng mới vào vị trí thứ tự cụ thể trong Microsoft SQL Server

  4. Làm cách nào để có được một tháng trước từ hôm nay trong SQL Server 2008?

  5. Không thể kết nối pyODBC với SQL Server 2008 Express R2