剛剛與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