Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL заявка за показване на db данни

Търсите да обобщите данни - променете данните в колони в редове. Старият училищен начин е да използвате CASE отчети - от SQL Server 2005 можете да използвате ОСНОВНА ОСНОВА команда. Ще оставя на някой друг да предостави примера за 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

Не ми е ясно какъв е типът данни на колоната questionno, актуализирайте го, ако е необходимо.

Ако потребителите могат да дефинират свои собствени въпроси, трябва да използвате динамичен SQL . Първо ще трябва да получите списък с въпросници и след това да конструирате CASE изразите въз основа на тези резултати. По същия начин за 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 ... е, защото съм твърде мързелив, за да се отърва от запетаята, която ще дойде от последния оператор CASE.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво е datetime2?

  2. Завъртане на данни два пъти с динамичен sql и персонализирани имена на колони

  3. Как да увеличите размера на файла с данни в SQL Server (T-SQL)

  4. Нивото на защита се промени по средата на проекта - сега проектът няма да се изгради

  5. Как да използваме клаузата Group By, когато използваме функцията Aggregate в Joins?