2010-04-19 6 views
1

une table comme celui-ciQuelqu'un pourrait-il me aider avec le script de cette

 
    empid questionid options 
    1  1   A 
    2  1   A 
    3  1   B 
    4  1   C 

maintenant je dois le résultat comme celui-ci

 
    questionid responseA responseB responseC 
    1   50%   25%   25% 
+0

Pouvez-vous le formater un peu mieux? – extraneon

+0

@vinoj - est ce devoir? – Paolo

+1

Selon l'exemple, vous devriez vouloir que B et C aient 25%? –

Répondre

0

Vous pourriez PIVOT;

SELECT questionid, (A/total) * 100 responseA, (B/total) * 100 responseB, (C/total) * 100 responseC FROM (
    SELECT T1.questionid, T1.options, T2.total 
    FROM the_tbl T1 
    INNER JOIN (SELECT questionid, CAST(COUNT(*) AS MONEY) AS total FROM the_tbl GROUP BY questionID) T2 ON T2.questionid = T1.questionid 
) T 
PIVOT (
    COUNT(options) FOR options IN ([A], [B], [C]) 
) AS pvt 
ORDER BY questionid 
0
SELECT CAST(100/ 
    (SELECT COUNT(*) 
    FROM your_Table as t2 
    WHERE t2.questionid = t1.questionid) 
    * COUNT(*) AS VARCHAR) + '%' AS 'Percent', OPTIONS, questionid 
FROM your_Table as t1 
--WHERE questionid = 2 
GROUP BY OPTIONS, questionid 
ORDER BY questionid; 

C'est une façon possible, vous pouvez le faire (fonctionne sur SQL-Server mais ne sait pas si c'est le cas en MySql)

0

T-SQL:

SELECT 
    questionid, 
    SUM(CASE options WHEN 'A' THEN 100.0 ELSE 0.0 END)/COUNT(options) AS responseA, 
    SUM(CASE options WHEN 'B' THEN 100.0 ELSE 0.0 END)/COUNT(options) AS responseB, 
    SUM(CASE options WHEN 'C' THEN 100.0 ELSE 0.0 END)/COUNT(options) AS responseC 
FROM 
    answers 
GROUP BY 
    questionid 

Note: Pour éviter la coulée et la multiplication 100, j'ai utilisé 100.0 et 0.0 valeurs dans CASE ... END expressions.

+0

Bien sûr, il est applicable si les options sont A, B ou C. Pour ajouter '%' à la fin des valeurs statistiques, vous devez convertir les instructions en 'varchar':' CAST (SUM (...)/COUNT (. ..) AS VARCHAR (10)) + '%' '. –

Questions connexes