Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kueri SQL untuk menampilkan data db

Anda ingin pivot data - ubah data kolom menjadi baris. Cara lama adalah dengan menggunakan CASE pernyataan - pada SQL Server 2005 Anda dapat menggunakan PIVOT memerintah. Saya akan menyerahkannya kepada orang lain untuk memberikan contoh 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

Tidak jelas bagi saya apa tipe data dari kolom pertanyaan, perbarui agar sesuai jika perlu.

Jika pengguna dapat menentukan pertanyaan mereka sendiri, Anda harus menggunakan SQL dinamis . Anda harus mendapatkan daftar pertanyaan terlebih dahulu, dan kemudian membuat pernyataan CASE berdasarkan hasil tersebut. Begitu juga untuk 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 ... karena saya terlalu malas untuk menghilangkan koma yang akan muncul dari pernyataan CASE terakhir.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TSQL pilih ke tabel Temp dari sql dinamis

  2. Kapan performa Distinct dan Group By berbeda?

  3. Tetapkan nilai default di kolom JIKA kondisi terpenuhi di SQL 2008

  4. Menjalankan SQL secara langsung; tidak ada kursor., SQL menyatakan 01000 di SQLExecDirect

  5. Perbarui SQL dengan penomoran berurutan