2012-04-27 131 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," 

一个人可能非常有创意。

感谢

尼科

相关问题