Có, bạn có thể thực hiện một trục động. Đôi khi, việc thiết lập PIVOT
truy vấn bằng phiên bản tĩnh trước tiên để bạn có thể xem cách truy vấn và kết quả sẽ xuất hiện. Sau đó, chuyển đổi truy vấn thành một phiên bản động.
Dưới đây là một ví dụ về phiên bản tĩnh so với động của truy vấn:
Tĩnh ( SQL Fiddle ):
select *
from
(
select u.userid,
u.fname,
u.lname,
u.mobile,
r.question,
r.choice
from users u
left join results r
on u.questionid = r.questionid
and u.choiceid = r.choiceid
) x
pivot
(
min(choice)
for question in([are you], [from])
) p
Động ( SQL Fiddle ):
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.question)
FROM results c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT userid, fname, lname, mobile, ' + @cols + ' from
(
select u.userid,
u.fname,
u.lname,
u.mobile,
r.question,
r.choice
from users u
left join results r
on u.questionid = r.questionid
and u.choiceid = r.choiceid
) x
pivot
(
min(choice)
for question in (' + @cols + ')
) p '
execute(@query)
Nếu bạn có thể cung cấp thêm chi tiết xung quanh cấu trúc bảng hiện tại của mình và sau đó là một số dữ liệu mẫu. Chúng tôi có thể giúp bạn tạo phiên bản mà bạn cần cho tình huống của mình.
Như tôi đã nói, đôi khi bắt đầu với phiên bản tĩnh sẽ dễ dàng hơn, trong đó bạn viết mã cố định vào các cột mà bạn cần chuyển đổi trước, sau đó chuyển sang phiên bản động.