| Author |
Topic |
|
Limbic
Starting Member
15 Posts |
Posted - 2006-05-17 : 03:19:09
|
Salute mates,So, this quiz stuff doesn’t let me go. I was able to create a pivot table with all the questions in the quiz and with all employees that participated. Everything works so far (at least I hope so).Here is what I haveemployeeId | Question1 | Question2 | Question 3 | …….. 1 3 1 0 2 0 2 1 Quick explanation, employee 1 answered question1 3 times correctly, question2 1 time but question3 was never answered correctly.Maybe you know right know what comes next in a customers mind, yes, he wants to see how many times an employee failed a question.So it should look like thisemployeeId | Correct1 , Wrong1 | Correct2, Wrong2 | Correct3, Wrong3 | …….. 1 3 0 1 0 0 2 2 0 2 2 1 1 0 Here one can see that employee1 answered question3 2 times wrong.Here is the DML and DDL for my solution of the simple pivot,-- Every attempt of an employee whether right or wrong comes in this tableCREATE TABLE quizsummary( employeeId INT, questionId INT, IsCorrect INT)--- All questions are stored in this table, responsible for the columns in the pivot tableCREATE TABLE questions( questionId INT, [text] NVARCHAR(15))-- Data for the questions table, one question(500) is NOT answered by any employee INSERT INTO questions(questionId, [text])VALUES(10,'What is..?')INSERT INTO questions(questionId, [text])VALUES(20,'What is..?')INSERT INTO questions(questionId, [text])VALUES(30,'What is..?')INSERT INTO questions(questionId, [text])VALUES(40,'What is..?')INSERT INTO questions(questionId, [text])VALUES(50,'What is..?')INSERT INTO questions(questionId, [text])VALUES(60,'What is..?')INSERT INTO questions(questionId, [text])VALUES(70,'What is..?')INSERT INTO questions(questionId, [text])VALUES(80,'What is..?')INSERT INTO questions(questionId, [text])VALUES(90,'What is..?')INSERT INTO questions(questionId, [text])VALUES(100,'What is..?')INSERT INTO questions(questionId, [text])VALUES(110,'What is..?')INSERT INTO questions(questionId, [text])VALUES(120,'What is..?')INSERT INTO questions(questionId, [text])VALUES(130,'What is..?')INSERT INTO questions(questionId, [text])VALUES(500,'What is..?')INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(4,10,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(3,20,0)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,10,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,10,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,10,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,10,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,20,0)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,20,0)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,20,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,20,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,30,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,30,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,40,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,40,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,50,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,50,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,60,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,60,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,70,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,70,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,80,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,80,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,90,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,90,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,100,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,100,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,110,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,110,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,120,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,120,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,130,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,130,1)DECLARE @select varchar(8000)DECLARE @sumfunc varchar(100)DECLARE @pivot varchar(100)DECLARE @table varchar(100) SET @SELECT = 'SELECT employeeId FROM quizsummary GROUP BY employeeId '-- Replace with employee selectSET @sumFunc = 'count(employeeId)'-- replace with surname or unit nameSET @pivot = 'questionId'-- replace with SET @table = 'questions'DECLARE @sql varchar(8000), @delim varchar(1)-- Create the pivot tableEXEC ('SELECT ' + @pivot + ' AS pivot INTO ##pivot FROM ' + @table + ' WHERE 1=2')EXEC ('INSERT INTO ##pivot SELECT DISTINCT ' + @pivot + ' FROM ' + @table + ' WHERE ' + @pivot + ' Is Not Null AND LEN('+@pivot+') > 0 ')SELECT @sql='', @sumfunc=stuff(@sumfunc, len(@sumfunc), 1, ' END)' )SELECT @delim=CASE Sign( CharIndex('char', data_type)+CharIndex('date', data_type) ) WHEN 0 THEN '' ELSE '''' END FROM tempdb.information_schema.columns WHERE table_name='##pivot' AND column_name='pivot'SELECT @sql=@sql + '''' + convert(varchar(100), pivot) + ''' = ' + stuff(@sumfunc,charindex( '(', @sumfunc )+1, 0, ' CASE ' + @pivot + ' WHEN ' + @delim + convert(varchar(100), pivot) + @delim + ' THEN ' ) + ', ' FROM ##pivotDROP TABLE ##pivotSELECT @sql=left(@sql, len(@sql)-1)SELECT @select=stuff(@select, charindex(' FROM ', @select)+1, 0, ', ' + @sql + ' ') -- stuff Deletes a specified length of characters and inserts another set of characters at a specified starting point.EXEC (@select)Has anyone some ideas how to double the columns of a question and to display the wrong attempts?Limbic |
|
|
Limbic
Starting Member
15 Posts |
Posted - 2006-05-18 : 04:29:41
|
So, I could figure something out by myself, as though I don't think it's a representable solution I'll post it.  CREATE TABLE quizsummary( employeeId INT, questionId INT, IsCorrect INT)--- All questions are stored in this table, responsible for the columns in the pivot tableCREATE TABLE questions( questionId INT, [text] NVARCHAR(15))-- Data for the questions table, one question(500) is NOT answered by any employee INSERT INTO questions(questionId, [text])VALUES(10,'What is..?')INSERT INTO questions(questionId, [text])VALUES(20,'What is..?')INSERT INTO questions(questionId, [text])VALUES(30,'What is..?')INSERT INTO questions(questionId, [text])VALUES(40,'What is..?')INSERT INTO questions(questionId, [text])VALUES(50,'What is..?')INSERT INTO questions(questionId, [text])VALUES(60,'What is..?')INSERT INTO questions(questionId, [text])VALUES(70,'What is..?')INSERT INTO questions(questionId, [text])VALUES(80,'What is..?')INSERT INTO questions(questionId, [text])VALUES(90,'What is..?')INSERT INTO questions(questionId, [text])VALUES(100,'What is..?')INSERT INTO questions(questionId, [text])VALUES(110,'What is..?')INSERT INTO questions(questionId, [text])VALUES(120,'What is..?')INSERT INTO questions(questionId, [text])VALUES(130,'What is..?')INSERT INTO questions(questionId, [text])VALUES(500,'What is..?')INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(4,10,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(3,20,0)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,10,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,10,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,10,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,10,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,20,0)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,20,0)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,20,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,20,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,30,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,30,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,40,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,40,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,50,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,50,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,60,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,60,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,70,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,70,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,80,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,80,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,90,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,90,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,100,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,100,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,110,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,110,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,120,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,120,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(1,130,1)INSERT INTO quizsummary(employeeId,questionId,IsCorrect) VALUES(2,130,1)/* Create a temporary table to modify questionId*/DROP TABLE #temp_quizsummaryCREATE TABLE #temp_quizsummary( employeeId INT, question NVARCHAR(50) )INSERT INTO #temp_quizsummarySELECT employeeId, question = CASE WHEN IsCorrect = 0 THEN CAST(questionId AS NVARCHAR) + '_W' ELSE CAST(questionId AS NVARCHAR) + '_C' ENDFROM quizsummaryCREATE TABLE #temp_questions( question NVARCHAR(50))INSERT INTO #temp_questions (question)SELECT CAST(questionId AS NVARCHAR) + '_W' AS question FROM questionsUNION ALLSELECT CAST(questionId AS NVARCHAR) + '_C' AS question FROM questionsSELECT * FROM #temp_questionsSELECT * FROM #temp_quizsummaryDECLARE @select varchar(8000)DECLARE @sumfunc varchar(100)DECLARE @pivot varchar(100)DECLARE @table varchar(100) SET @SELECT = 'SELECT employeeId FROM #temp_quizsummary GROUP BY employeeId '-- Replace with employee selectSET @sumFunc = 'count(employeeId)'-- replace with surname or unit nameSET @pivot = 'question'-- replace with SET @table = '#temp_questions'DECLARE @sql varchar(8000), @delim varchar(1)-- Create the pivot tableEXEC ('SELECT ' + @pivot + ' AS pivot INTO ##pivot FROM ' + @table + ' WHERE 1=2')EXEC ('INSERT INTO ##pivot SELECT DISTINCT ' + @pivot + ' FROM ' + @table + ' WHERE ' + @pivot + ' Is Not Null AND LEN('+@pivot+') > 0 ')SELECT @sql='', @sumfunc=stuff(@sumfunc, len(@sumfunc), 1, ' END)' )SELECT @delim=CASE Sign( CharIndex('char', data_type)+CharIndex('date', data_type) ) WHEN 0 THEN '' ELSE '''' END FROM tempdb.information_schema.columns WHERE table_name='##pivot' AND column_name='pivot'SELECT @sql=@sql + '''' + convert(varchar(100), pivot) + ''' = ' + stuff(@sumfunc,charindex( '(', @sumfunc )+1, 0, ' CASE ' + @pivot + ' WHEN ' + @delim + convert(varchar(100), pivot) + @delim + ' THEN ' ) + ', ' FROM ##pivotDROP TABLE ##pivotSELECT @sql=left(@sql, len(@sql)-1)SELECT @select=stuff(@select, charindex(' FROM ', @select)+1, 0, ', ' + @sql + ' ') -- stuff Deletes a specified length of characters and inserts another set of characters at a specified starting point.EXEC (@select)But if someone has a simplied version don't hesitate |
 |
|
|
|
|
|