2012-04-27 2 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 팀을 다시 선택 질문 @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

11

여기 몇 가지 다른 접근법을 사용할 수 있습니다. 조합과

1. CTE : UNPIVOT와

;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 (statement) 문은 어떨까요? –

0

이 훨씬 더 간단한 해결책이 아니라, 내가 제대로 질문을 이해한다면, 당연하지.

"spam"이라는 테이블에있는 전자 메일 주소를 변수에로드하려고합니다.

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

변수 @list에로드하려면 :

select email from spam 

말, 다음과 같은 목록을 생성 @list 이제 테이블에 삽입 할 수 있습니다

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

도움이되기를 바랍니다.

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

하나는 매우 창조적이 될 수 있습니다.

감사

니코

관련 문제