2010-04-19 1 views
1

есть таблица, как этотМожет кто-нибудь помочь мне со сценарием для этого

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

Теперь мне нужно привести, как это

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

Можете ли вы отформатировать его немного лучше? – extraneon

+0

@vinoj - это домашнее задание? – Paolo

+1

в соответствии с примером, вы должны хотеть, чтобы B и C имели 25% права? –

ответ

0

Вы можете 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; 

Это один из возможных способов вы можете сделать это (работает на SQL-Server, но не уверен, что это происходит в 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 

Примечание: Чтобы избежать литья и умножения 100, я использовал 100.0 и 0.0 значения в CASE ... END выражений.

+0

Конечно, это применимо, если параметры A, B или C. Чтобы добавить «%» в конец статистических значений, вы должны использовать инструкции для 'varchar':' CAST (SUM (...)/COUNT (. ..) AS VARCHAR (10)) + '%' '. –

Смежные вопросы