क्वेरी के साथ डेटा तालिका में डालें


144

मेरे पास एक मौजूदा क्वेरी है जो वर्तमान डेटा को आउटपुट करती है, और मैं इसे एक टेम्‍प टेबल में सम्मिलित करना चाहूंगा, लेकिन कुछ मुद्दों पर ऐसा कर रहा हूं। किसी को यह कैसे करना है पर कुछ अंतर्दृष्टि होगी?

यहाँ एक उदाहरण है

SELECT *
FROM  (SELECT Received,
              Total,
              Answer,
              ( CASE
                  WHEN application LIKE '%STUFF%' THEN 'MORESTUFF'
                END ) AS application
       FROM   FirstTable
       WHERE  Recieved = 1
              AND application = 'MORESTUFF'
       GROUP  BY CASE
                   WHEN application LIKE '%STUFF%' THEN 'MORESTUFF'
                 END) data
WHERE  application LIKE isNull('%MORESTUFF%', '%') 

यह मेरे डेटा को वर्तमान में उस तरह से आउटपुट करने के लिए लगता है जिस तरह से मुझे इसकी आवश्यकता है, लेकिन मैं इसे एक अस्थायी तालिका में पारित करना चाहूंगा। मेरी समस्या यह है कि मैं SQL क्वेरीज़ के लिए बहुत नया हूँ और ऐसा करने का कोई तरीका नहीं ढूंढ सका हूँ। या अगर यह संभव भी है। यदि यह संभव नहीं है, तो क्या डेटा प्राप्त करने का एक बेहतर तरीका है जिसे मैं WHERE application LIKE isNull('%MORESTUFF%','%')एक अस्थायी तालिका में ढूंढ रहा हूं ?


2
एक #tempतालिका में जो पहले से मौजूद है या उसे नया बनाने की आवश्यकता होगी?
मार्टिन स्मिथ

1
@ मर्टिनस्मिथ - यह एक नया होगा।
scapegoat17

1
LIKE ISNULL('%MORESTUFF%', '%')हमेशा के रूप में ही LIKE '%MORESTUFF%'होगा, है ना? चूंकि '% MORESTUFF%' (स्ट्रिंग शाब्दिक) कभी शून्य नहीं है?
gnud

जवाबों:


187
SELECT *
INTO #Temp
FROM

  (SELECT
     Received,
     Total,
     Answer,
     (CASE WHEN application LIKE '%STUFF%' THEN 'MORESTUFF' END) AS application
   FROM
     FirstTable
   WHERE
     Recieved = 1 AND
     application = 'MORESTUFF'
   GROUP BY
     CASE WHEN application LIKE '%STUFF%' THEN 'MORESTUFF' END) data
WHERE
  application LIKE
    isNull(
      '%MORESTUFF%',
      '%')

148

SQL सर्वर R2 2008 ASको निम्नानुसार क्लॉज़ की आवश्यकता है:

SELECT * 
INTO #temp
FROM (
    SELECT col1, col2
    FROM table1
) AS x

AS xअंत के बिना क्वेरी विफल रही ।


संपादित करें

SS2016 का उपयोग करते समय भी इसकी आवश्यकता होती as tहै, अंत में जोड़ना था ।

 Select * into #result from (SELECT * FROM  #temp where [id] = @id) as t //<-- as t

5
दिलचस्प। मेरा बस एक ही मुद्दा था। अंत में "जैसा [x]" जोड़ना सब कुछ ठीक काम कर गया। ऐसा क्यों है?
गॉडफादर

5
@godfathr यह है क्योंकि खंड से एक व्युत्पन्न तालिका का उपयोग कर रहा है
wootscootinboogie

35

ऐसा करने का सबसे तेज़ तरीका "SELECT INTO" कमांड का उपयोग कर रहा है

SELECT * INTO #TempTableName
FROM....

यह एक नई तालिका बनाएगा, आपको इसे पहले से बनाने की आवश्यकता नहीं है।


क्या #TempTableName में कॉलम जोड़ना संभव है?
FrenkyB

@FrenkyB हाँ, एक बार टेबल बना लेने के बाद आप ALTER TABLE ADD COLUMN स्टेटमेंट
यूरी गैलेन्टर

12

व्यक्तिगत रूप से, मुझे यह पता लगाने के लिए एक छोटे से हाथ की ज़रूरत थी कि यह कैसे उपयोग किया जाए और यह वास्तव में भयानक है।

IF(OBJECT_ID('tempdb..#TEMP') IS NOT NULL) BEGIN DROP TABLE #TEMP END
        SELECT *
            INTO #TEMP
            FROM (
            The query you want to use many times
            ) AS X

SELECT * FROM #TEMP WHERE THIS = THAT
SELECT * FROM #TEMP WHERE THIS <> THAT
SELECT COL1,COL3 FROM #TEMP WHERE THIS > THAT

DROP TABLE #TEMP

8

आप ऐसा कर सकते हैं:

INSERT INTO myTable (colum1, column2)
SELECT column1, column2 FROM OtherTable;

बस यह सुनिश्चित करें कि कॉलम मिलान कर रहे हैं, दोनों डेटाटाइप के रूप में संख्या में हैं।


5

इसे इस्तेमाल करे:

SELECT *
INTO #Temp
FROM 
(select * from tblorders where busidate ='2016-11-24' and locationID=12
) as X

कृपया एक्स के साथ उपनाम का उपयोग करें ताकि यह स्क्रिप्ट और परिणाम में विफल न हो।



2

यह संभव है। इस तरह आजमाएं:

Create Global Temporary Table 
BossaDoSamba 
On Commit Preserve Rows 
As 
select ArtistName, sum(Songs) As NumberOfSongs 
 from Spotfy 
    where ArtistName = 'BossaDoSamba'
 group by ArtistName;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.