Вставте дані у таблицю темп із запитом


144

У мене є існуючий запит, який видає поточні дані, і я хотів би вставити його в таблицю Temp, але у мене виникають деякі проблеми. Хтось мав би деяке розуміння, як це зробити?

Ось приклад

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таблицю, яка вже існує, або для неї потрібно створити нову?
Мартін Сміт

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завершилася.


EDIT

Це також потрібно при використанні 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 так, як тільки буде створена таблиця, ви можете використати операцію ALTER TABLE ADD COLUMN
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;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.