2012-04-27 200 views
30

我創建了一個查詢,並重新使用了一些結果。我搜索一種方法將結果放入一個變量並使用它。SQL查詢,將SELECT的結果存儲在本地變量中

一個簡單的方法,看看我想要的東西看起來像這樣 - 我想這一點:

DECLARE @result1 ????? 

SET @result1 = SELECT a,b,c FROM table1 
SELECT a AS val FROM @result1 
UNION 
SELECT b AS val FROM @result1 
UNION 
SELECT c AS val FROM @result1 

不是這個:

SELECT a AS val FROM (SELECT a,b,c FROM table1) 
UNION 
SELECT b AS val FROM (SELECT a,b,c FROM table1) 
UNION 
SELECT c AS val FROM (SELECT a,b,c FROM table1) 

這不是此查詢的結果,我很擔心用,而是:

  1. 停止選擇結果很多次 - 我的樣品中,我重新選擇表3恬es

  2. 查詢@result1通常要複雜得多。因此,使用變量時,代碼將更清晰。

也許我想要很多 - 或者有一種局部變量。或者使用裏面的類型表和設置數據。

你對我有什麼建議?

謝謝

回答

36

您可以創建表變量:

DECLARE @result1 TABLE (a INT, b INT, c INT) 

INSERT INTO @result1 
SELECT a, b, c 
FROM table1 

SELECT a AS val FROM @result1 
UNION 
SELECT b AS val FROM @result1 
UNION 
SELECT c AS val FROM @result1 

這應該是罰款,你需要什麼。

+0

啊,這是什麼,我想我應該做的。我只是張貼它知道如果是另一種方式。保護你。與cte的 – forX 2012-04-27 18:19:47

11

以下是您可以採取的其他方法。

1. CTE與工會:

;WITH cte AS (SELECT a, b, c FROM table1) 
SELECT a AS val FROM cte 
UNION SELECT b AS val FROM cte 
UNION SELECT c AS val FROM cte; 

2. CTE與逆透視:

;WITH cte AS (SELECT a, b, c FROM table1) 
SELECT DISTINCT val 
FROM cte 
UNPIVOT (val FOR col IN (a, b, c)) u; 
+1

似乎有趣。不需要創建每一行的表格。坦克你 – forX 2012-04-27 19:42:57

+0

@AnthonyFaull謝謝你的回答。但是,「in(statement)'語句怎麼樣? – 2014-09-27 21:51:17

0

這不是一個簡單得多的解決方案,如果我理解正確的問題,當然。

我想將名爲「spam」的表中的電子郵件地址加載到變量中。

select email from spam 

生成以下列表中,說:

.accountant 
.bid 
.buiilldanything.com 
.club 
.cn 
.cricket 
.date 
.download 
.eu 

加載到變量@list:

declare @list as varchar(8000) 
set @list += @list (select email from spam) 

@list現在可以插入到表等

我希望這有助於。

使用它爲一個。csv文件或VB,秒殺代碼:

declare @list as varchar(8000) 
set @list += @list (select '"'+email+',"' from spam) 
print @list 

和它產生現成的代碼在其他地方使用:

".accountant," 
".bid," 
".buiilldanything.com," 
".club," 
".cn," 
".cricket," 
".date," 
".download," 
".eu," 

一個人可能非常有創意。

感謝

尼科

相關問題