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.