2012-04-27 22 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

ええ、それは私が私がやるべきだと思う何でした。私はちょうどtheres別の方法を知るためにそれを投稿します。あなたにタンクする。 – forX

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

+0

@AnthonyFaull。しかし、 'in(ステートメント)'ステートメントはどうですか? –

0

が、これははるかに簡単な解決策はありませんが、私が正しく質問を理解していれば、もちろん。

「スパム」という表にある電子メールアドレスを変数に読み込みたいとします。

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は今など

、テーブルに挿入することができます

こちらがお役に立てば幸いです。

a。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," 

一つは非常に創造することができます。

おかげ

ニコ

関連する問題