2015-09-21 34 views
1

我想將某些ID存儲在變量中,然後在查詢中必須使用該變量多次。我用這個格式:如何聲明一個包含多個整數值的變量SQL Server

DECLARE @aid INT 
SELECT @aid = AP.aid 
FROM 
    sub_aminer_paper AP 
GROUP BY 
    AP.aid 
HAVING 
    MIN(p_year) = 1990 AND MAX(AP.p_year) = 2014 AND COUNT(AP.pid) BETWEEN 10 AND 40 

SELECT 
    * 
FROM 
    sub_aminer_paper 
WHERE 
    aid = @aid 

但是,這給我的結果只從ID的列表任何一個ID爲我所用的查詢從表sub_aminer_paper檢索多個ID的。

請幫助和謝謝!

+0

創建臨時表,並存儲在它的結果和然後做選擇。 'INT'不能存儲多個值。 – Abhishek

+0

或者一個表變量或者在while循環中使用這個變量。 – ProblemSolver

+0

請參閱http://www.sommarskog.se/arrays-in-sql.html。 –

回答

1

你想要的是一個table variable

DECLARE @aid TABLE(id INT PRIMARY KEY) 

INSERT INTO @aid 
SELECT AP.aid 
FROM sub_aminer_paper AP 
GROUP BY AP.aid 
HAVING 
    MIN(p_year) = 1990 
    AND MAX(AP.p_year) = 2014 
    AND COUNT(AP.pid) BETWEEN 10 AND 40 

SELECT * 
FROM sub_aminer_paper 
WHERE 
    aid = (SELECT id FROM @aid) 
1

你也可以做到這一點,而無需使用一個變量,像這樣的東西:

SELECT * 
FROM sub_aminer_paper AP1 
where exists (
    SELECT 1 
    FROM sub_aminer_paper AP2 
    WHERE AP1.aid = AP2.aid 
    GROUP BY AP2.aid 
    HAVING 
    MIN(AP2.p_year) = 1990 
    AND MAX(AP2.p_year) = 2014 
    AND COUNT(AP2.pid) BETWEEN 10 AND 40) 
+0

或者使用CTE或派生表來做同樣的事情 –