刚刚与MySQL服务器上的一些SQL语句5.1 我已经问了一个问题,如何使两个表的具体数量玩耍(见here) ,我也找到了答案如何调换我的结果(见here),但我不能在我的本地MYSQL服务器5.1上使用它。在MYSQL使用@DECLARE 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;
我无法运行我想要转移临时结果的最后部分。我收到“DECLARE”错误
/* SQL错误(1064):您的SQL语法错误;在第2行检查对应于你的MySQL服务器版本的权利 语法使用附近的 手册 '声明为NVARCHAR(MAX)@cols, @query AS NVARCHAR(MAX)
选择@cols ='// 2行受影响,找到2行。 4个查询中的3个的持续时间:0,000秒。 */
任何人都可以帮忙吗?
您可以编辑您OP与一些样本数据,然后所需的结果? – Taryn 2013-04-04 12:28:18
当然,会做到这一点。 – LStrike 2013-04-04 12:38:10