sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-fråga för att visa db-data

Du vill pivotera data - ändra kolumnära data till rader. Det gamla skolans sättet är att använda CASE satser - från och med SQL Server 2005 kan du använda PIVOT kommando. Jag överlåter till någon annan att ge PIVOT-exemplet.

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

Det är inte klart för mig vad datatypen för frågekolumnen är, uppdatera för att passa om det behövs.

Om användare kan definiera sina egna frågor måste du använda dynamisk SQL . Du måste först få en lista med frågenummer och sedan konstruera CASE-satserna baserat på dessa resultat. Likaså för 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 ... beror på att jag är för lat för att bli av med kommatecken som skulle komma från det sista CASE-uttalandet.



  1. Hur man skapar en tabell med en främmande nyckel i SQL

  2. MYSQL välj antal efter värde

  3. Prag PostgreSQL Meetup

  4. uppdatera och komprimera SQLite-databas i Android