只是在 MYSQL Server 5.1 上玩一些 sql 语句我已经问过一个问题如何对两个表进行特定计数(见这里),我还找到了一个答案如何转置我的结果(见这里)但我不能用它我的本地 MYSQL Server 5.1。
这是表一:测试
id|name|test_type
-------------
1|FirstUnit|1
2|FirstWeb|2
3|SecondUnit|1
第二张表:test_type
id|type
--------
1|UnitTest
2|WebTest
以下结果将写入“yourtable”(临时表)
type|amount
-----------
UnitTest|2
WebTest|1
最后我想要的是:
UnitTest|WebTest
-----------------
2|1
(问题是我认为,最后一部分来自一个 MS-SQL 示例,所以它不适用于 MYSQL)
这是我的 sql 语句:
--create a temporary table
create temporary table IF NOT EXISTS yourtable
(
test_type varchar(255),
amount varchar(255)
);
--make a selecten into the temporary table
INSERT INTO yourtable
SELECT
t.test_type ,
COUNT(*) AS amount
FROM test_types AS t
JOIN test AS te ON t.id= te.test_type
GROUP BY test_type
ORDER BY t.test_type;
--just for debugging
select * from yourtable;
-- transpose result
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Type)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT ' + @cols + ' from
(
select Type, Amount,
row_number() over(partition by Type order by Type, Amount) rn
from yourtable
) x
pivot
(
max(Amount)
for Type in (' + @cols + ')
) p '
execute(@query)
--drop temporary table
drop table yourtable;
我无法运行要转置临时结果的最后一部分。我收到“声明”错误
/* SQL 错误 (1064): 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) 附近使用正确的语法
select @cols = ' at line 2 // 2 行受影响,找到 2 行。4 个查询中的 3 个的持续时间:0,000 秒。*/
有人可以帮忙吗?