2012-04-27 13 views
30

में 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 टिम reselected 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

हाँ, कि मैं क्या सोचता हूँ मुझे क्या करना चाहिए था। मैं सिर्फ यह जानने के लिए पोस्ट करता हूं कि क्या एक और तरीका है। धन्यवाद। सीटीई के साथ – 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. unpivot साथ 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

@ एंथनीफूल उत्तर देने के लिए धन्यवाद। लेकिन, 'कथन में' कथन के बारे में कैसे? –

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 अब एक टेबल में डाला जा सकता है, आदि

मुझे आशा है कि इससे मदद मिलती है।

इसका उपयोग करने के लिए।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," 

एक बहुत ही रचनात्मक हो सकता है।

धन्यवाद

निको

संबंधित मुद्दे