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

Xoay các cột động, không có sự tổng hợp

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server, kết hợp LIKE và IN?

  2. Kích thước được sử dụng với NVARCHAR có quan trọng không?

  3. Làm cách nào để thiết lập kết nối ADODB với SQL Server 2008 trong Microsoft Access 2010?

  4. Thêm mệnh đề WHERE vào SQL động / lập trình

  5. Làm cách nào để tạo bảng bằng cách sử dụng truy vấn chọn trong SQL Server?