Vì bạn muốn xoay vòng nhiều cột dữ liệu, nên trước tiên, tôi khuyên bạn nên bỏ quay result
, score
và grade
để bạn không có nhiều cột nhưng bạn sẽ có nhiều hàng.
Tùy thuộc vào phiên bản SQL Server của bạn, bạn có thể sử dụng chức năng UNPIVOT hoặc ÁP DỤNG CHÉO. Cú pháp để hủy chia dữ liệu sẽ tương tự như:
select ratio, col, value
from GRAND_TOTALS
cross apply
(
select 'result', cast(result as varchar(10)) union all
select 'score', cast(score as varchar(10)) union all
select 'grade', grade
) c(col, value)
Xem SQL Fiddle với Demo. Khi dữ liệu đã được bỏ chia nhỏ, bạn có thể áp dụng chức năng PIVOT:
select ratio = col,
[current ratio], [gearing ratio], [performance ratio], total
from
(
select ratio, col, value
from GRAND_TOTALS
cross apply
(
select 'result', cast(result as varchar(10)) union all
select 'score', cast(score as varchar(10)) union all
select 'grade', grade
) c(col, value)
) d
pivot
(
max(value)
for ratio in ([current ratio], [gearing ratio], [performance ratio], total)
) piv;
Xem SQL Fiddle với Demo. Điều này sẽ cho bạn kết quả:
| RATIO | CURRENT RATIO | GEARING RATIO | PERFORMANCE RATIO | TOTAL |
|--------|---------------|---------------|-------------------|-----------|
| grade | Good | Good | Satisfactory | Good |
| result | 1.29400 | 0.33840 | 0.04270 | (null) |
| score | 60.00000 | 70.00000 | 50.00000 | 180.00000 |