Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 General SQL Server Forums
 New to SQL Server Programming
 select statement

Author  Topic 

rob10
Starting Member

2 Posts

Posted - 2012-07-31 : 06:57:33
Table 1 (ca. 80 studenten):
userid | lastname | firstname
1 | jansen | jan
2 | pietersen | piet
etc.

de antwoorden van 120 multiple choice vragen (a t/m d) staan in
table 2:
answer | questionno | userid
a | 1 | 1
c | 2 | 1
b | 1 | 2
etc.

Nu wil ik de resultaten als volgt weergeven:
lastname | firstname | vraag 1 | vraag 2 | vraag 3 |... | vraag 120
jansen | jan | a | c | etc....
pietersen | piet | b | etc....

Weet iemand hoe ik hiervoor een select statement kan opzetten?

Lumbago
Norsk Yak Master

3271 Posts

Posted - 2012-07-31 : 07:08:50
English my friend. But you might want to look up PIVOT: http://msdn.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

- Lumbago
My blog-> http://thefirstsql.com
Go to Top of Page

lionofdezert
Aged Yak Warrior

885 Posts

Posted - 2012-07-31 : 07:33:30
beer dynamische crosstab query om je resultaten te krijgen
(Try dynamic crosstab query to get your results)
http://www.databasejournal.com/features/mssql/article.php/3657506/SQLServer-Dynamic-Cross-Tab.htm

--------------------------
http://connectsql.blogspot.com/
Go to Top of Page

rob10
Starting Member

2 Posts

Posted - 2012-07-31 : 10:27:26
Dank u voor het advies. Ik ben onmiddellijk op zoek gegaan hoe een pivot en een crosstab query te maken. UIteindelijk is het gelukt! En kon ik zelfs uitrekenen hoeveel vragen er goed zijn beantwoord per student.
Dit is de oplossing en helpt misschien ook iemand anders (al weet ik niet waarom ze max gebruikt hebben en moet ik het nog verder uitreiden t/m vraag 120):

Hoe ik de pivot methode moest gebruiken, daar kwam ik jammer genoeg niet uit. Dat had ik ook wel willen weten.

SELECT
lastname, firstname,SUM(SCORE) AS AantGoed,
MAX(CASE QUESTID WHEN 1 THEN QANSWER ELSE '' END) AS [Vraag 1],
MAX(CASE QUESTID WHEN 2 THEN QANSWER ELSE '' END) AS [Vraag 2],
MAX(CASE QUESTID WHEN 3 THEN QANSWER ELSE '' END) AS [Vraag 3],
MAX(CASE QUESTID WHEN 4 THEN QANSWER ELSE '' END) AS [Vraag 4],
MAX(CASE QUESTID WHEN 5 THEN QANSWER ELSE '' END) AS [Vraag 5],
MAX(CASE QUESTID WHEN 6 THEN QANSWER ELSE '' END) AS [Vraag 6],
MAX(CASE QUESTID WHEN 7 THEN QANSWER ELSE '' END) AS [Vraag 7],
MAX(CASE QUESTID WHEN 8 THEN QANSWER ELSE '' END) AS [Vraag 8],
MAX(CASE QUESTID WHEN 9 THEN QANSWER ELSE '' END) AS [Vraag 9],
MAX(CASE QUESTID WHEN 10 THEN QANSWER ELSE '' END) AS [Vraag 10]
FROM (SELECT u.firstname as firstname,u.lastname as lastname,A.USERID AS LOGINID, A.a_qno AS QUESTID,A.ANSWER AS QANSWER,
B.trueanswer AS REALANSWER,SCORE = CASE WHEN A.ANSWER=B.trueanswer
THEN 1 ELSE '' END FROM answers_exam1 A
left join usersprevious u on u.userid=a.userid
LEFT JOIN questionsprevious B ON A.QUESTIONID=B.QUESTIONID) AS MYTABLE
GROUP BY LOGINID, lastname,firstname
order by lastname
Go to Top of Page
   

- Advertisement -