แทรกข้อมูลลงในตารางชั่วคราวด้วยแบบสอบถาม


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 Queries และไม่สามารถหาวิธีที่จะทำได้ หรือถ้าเป็นไปได้ หากไม่สามารถทำได้มีวิธีที่ดีกว่าในการรับข้อมูลที่ฉันกำลังมองหาWHERE application LIKE isNull('%MORESTUFF%','%')ลงในตารางอุณหภูมิหรือไม่?


2
เป็น#tempตารางที่มีอยู่แล้วหรือจะต้องสร้างใหม่?
Martin Smith

1
@MartinSmith - มันจะเป็นใหม่
scapegoat17

1
LIKE ISNULL('%MORESTUFF%', '%')จะเหมือนกันLIKE '%MORESTUFF%'ใช่มั้ย เนื่องจาก '% MORESTUFF%' (ตัวอักษรสตริง) ไม่มีวันเป็นโมฆะ?
gnud

คำตอบ:


188
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%',
      '%')

149

SQL Server 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
น่าสนใจ ฉันเพิ่งมีปัญหาเดียวกัน การเพิ่ม "As [x]" ในตอนท้ายทำให้ทุกอย่างทำงานได้ดี ทำไมนี้
godfathr

5
@godfathr เป็นเพราะประโยคจากนั้นใช้ตารางที่ได้รับมา
wootscootinboogie

35

วิธีที่เร็วที่สุดในการทำเช่นนี้คือการใช้คำสั่ง "SELECT INTO" เช่น

SELECT * INTO #TempTableName
FROM....

นี่จะเป็นการสร้างตารางใหม่โดยที่คุณไม่จำเป็นต้องสร้างมันล่วงหน้า


เป็นไปได้หรือไม่ที่จะเพิ่มคอลัมน์ใน #TempTableName
FrenkyB

@FrenkyB ใช่เมื่อสร้างตารางแล้วคุณสามารถใช้คำสั่งเปลี่ยนตารางเพิ่มคอลัมน์ได้
Yuriy Galanter

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

กรุณาใช้นามแฝงกับ 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;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.