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

Truy vấn SQL để hiển thị dữ liệu db

Bạn đang tìm kiếm dữ liệu tổng hợp - thay đổi dữ liệu cột thành các hàng. Cách học cũ là sử dụng CASE câu lệnh - kể từ SQL Server 2005, bạn có thể sử dụng PIVOT yêu cầu. Tôi sẽ để người khác cung cấp ví dụ về PIVOT.

SELECT t.memberid,
       CASE WHEN t.questionno = 1 THEN t.answerno ELSE NULL END AS 1,
       CASE WHEN t.questionno = 2.1 THEN t.answerno ELSE NULL END AS 2.1,
       CASE WHEN t.questionno = 2.2 THEN t.answerno ELSE NULL END AS 2.2,
       CASE WHEN t.questionno = 3 THEN t.answerno ELSE NULL END AS 3
       CASE WHEN t.questionno = 5 THEN t.answerno ELSE NULL END AS 5
       CASE WHEN t.questionno = 7 THEN t.answerno ELSE NULL END AS 7
  FROM ANSWER t

Tôi không rõ kiểu dữ liệu của cột questionno là gì, hãy cập nhật cho phù hợp nếu cần.

Nếu người dùng có thể xác định câu hỏi của riêng họ, bạn phải sử dụng SQL động . Trước tiên, bạn sẽ cần lấy một danh sách các câu hỏi không, và sau đó xây dựng các câu lệnh CASE dựa trên các kết quả đó. Tương tự như vậy đối với PIVOT ...

DECLARE @SQL nvarchar(4000)
DECLARE @questionno [data type here]

SET @SQL = 'SELECT t.memberid,'

DECLARE c1 CURSOR READ_ONLY FOR
  SELECT t.questionno
    FROM ANSWER t
GROUP BY t.questionno
ORDER BY t.questionno

OPEN c1

FETCH NEXT FROM c1 INTO @questionno 

WHILE @@FETCH_STATUS = 0
BEGIN

  SET @SQL = @SQL + ' CASE WHEN t.questionno = '+ @questionno +' THEN t.answerno ELSE NULL END AS '+ @questionno','

  FETCH NEXT FROM c1 INTO @questionno 
END

CLOSE c1
DEALLOCATE c1

SET @SQL = @SQL + 'NULL FROM ANSWER t '

EXEC(@SQL)

NULL FROM ... là do tôi quá lười biếng để loại bỏ dấu phẩy có trong câu lệnh CASE cuối cù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. Cách trích xuất nhiều chuỗi từ các hàng đơn trong SQL Server

  2. Lược đồ được chỉ định không hợp lệ. Lỗi:Nhiều loại với tên

  3. Chuyển đổi ‘time’ thành ‘smalldatetime’ trong SQL Server (Ví dụ T-SQL)

  4. Ký tự thoát trong SQL

  5. Cập nhật cột varbinary (MAX)