Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 有人能帮我写剧本吗_Mysql_Sql Server - Fatal编程技术网

Mysql 有人能帮我写剧本吗

Mysql 有人能帮我写剧本吗,mysql,sql-server,Mysql,Sql Server,有这样的桌子吗 empid questionid options 1 1 A 2 1 A 3 1 B 4 1 C questionid responseA responseB responseC 1 50% 25% 25% empid问题I

有这样的桌子吗

empid questionid options 1 1 A 2 1 A 3 1 B 4 1 C questionid responseA responseB responseC 1 50% 25% 25% empid问题ID选项 11A 21 A 31B 4.1 C 现在我需要这样的结果

empid questionid options 1 1 A 2 1 A 3 1 B 4 1 C questionid responseA responseB responseC 1 50% 25% 25% 问题答案答案答案答案答案答案答案答案 1 50% 25% 25% 这是一种可能的方法 (在SQL Server上工作,但不确定它在MySql中是否工作)

您可以使用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
T-SQL:


注意:为了避免强制转换和乘以100,我在
案例中使用了
100.0
0.0
值。。。结束
表达式。

您能把它的格式设置得更好一点吗?根据示例,您应该希望B和C的值为25%,对吗?是的,加布。你说得对。为什么这个服务器被标记为
?如果是
sqlserver
,那么为什么要使用
mysql
标签呢?您是否有其他回复(除了
A
B
C
)`?对不起,我是新用户。我在sql和server之间留了一个空格。它现在已编辑并保存。当然,如果选项是A、B或C,则它适用。要将“%”添加到统计值的末尾,您应该将语句强制转换为
varchar
cast(SUM(…)/COUNT(…)作为varchar(10))+“%”