【问题标题】:How can I insert data into a temporary table如何将数据插入临时表
【发布时间】:2017-04-02 11:14:28
【问题描述】:

有没有办法将此查询的结果插入到 SSMS 中的临时表中?我尝试了多种方法,但到目前为止都失败了。

或者还有其他方法吗,我一直在寻找它来查询结果并加入另一个我似乎无法在查询本身中执行的表。

USE CommDB

;With CTE AS (SELECT s.attendanceNumber, 
       MAX(CASE WHEN s.rnk = 1 THEN s.ExamExaminationCode END) as examCode1,
       MAX(CASE WHEN s.rnk = 2 THEN s.ExamExaminationCode END) as examCode2,
       MAX(CASE WHEN s.rnk = 3 THEN s.ExamExaminationCode END) as examCode3,
       MAX(CASE WHEN s.rnk = 4 THEN s.ExamExaminationCode END) as examCode4,
       MAX(CASE WHEN s.rnk = 5 THEN s.ExamExaminationCode END) as examCode5,
       MAX(CASE WHEN s.rnk = 6 THEN s.ExamExaminationCode END) as examCode6,
       MAX(CASE WHEN s.rnk = 7 THEN s.ExamExaminationCode END) as examCode7,
       MAX(CASE WHEN s.rnk = 8 THEN s.ExamExaminationCode END) as examCode8,
       MAX(CASE WHEN s.rnk = 9 THEN s.ExamExaminationCode END) as examCode9,
       MAX(CASE WHEN s.rnk = 10 THEN s.ExamExaminationCode END) as examCode10,
       MAX(CASE WHEN s.rnk = 11 THEN s.ExamExaminationCode END) as examCode11,
       MAX(CASE WHEN s.rnk = 12 THEN s.ExamExaminationCode END) as examCode12,
       MAX(CASE WHEN s.rnk = 13 THEN s.ExamExaminationCode END) as examCode13,
       MAX(CASE WHEN s.rnk = 14 THEN s.ExamExaminationCode END) as examCode14
FROM (
    SELECT  [AttendanceNumber]
           ,[ExaminationDate]
           ,RadiologyID
           ,[ExamExaminationCode]
           ,ROW_NUMBER() OVER(PARTITION BY [AttendanceNumber]
            ORDER BY [ExamExaminationCode]) as rnk --Ordered ASC so examcodes dont move 

      FROM [CommDB].[dbo].[tblRadiologyData] rd 
      where rd.ExaminationDate >= '01 october 2015'
      and   rd.AttendanceSiteCode IN('CNM','RNM') ) s
GROUP BY s.attendanceNumber)

Select c.examCode1,
         c.examCode2,
         c.examCode3,
         c.examCode4,
         c.examCode5,
         c.examCode6,
         c.examCode7,
         c.examCode8,
         c.examCode9,
         c.examCode10,
         c.examCode11,
         c.examCode12,
         c.examCode13,
         c.examCode14,
         c.AttendanceNumber,
         COUNT(c.AttendanceNumber) as [No of occurances]
--       (Select lu.HRGCode from CommDB.dbo.tblRadiologyNucMedLookup lu
--        Where ISNULL(c.examCode1,'') = ISNULL(lu.Exam01,'') 
--        )
from CTE c




GROUP by c.examCode1,
         c.examCode2,
         C.examCode3,
         C.examCode4,
         C.examCode5,
         C.examCode6,
         C.examCode7,
         C.examCode8,
         C.examCode9,
         C.examCode10,
         C.examCode11,
         C.examCode12,
         C.examCode13,
         C.examCode14,
         C.AttendanceNumber


ORDER BY C.examCode1

【问题讨论】:

  • 您遇到的错误是什么?此外,您提到您正在尝试加入另一个表,但您发布的脚本没有任何连接。
  • select .... into #someTemp from CTE group by....

标签: tsql common-table-expression temp-tables


【解决方案1】:

使用 pivot 语句,您的生活会更轻松 - 您不需要 cte。

你的问题 - 有几种类型的临时表:

  1. 全局临时表 - 以 ## 为前缀(您可以从其他会话访问此表)
  2. 会话临时表 - 以 # 为前缀(您只能从会话中访问此表)
  3. 临时变量 - 必须声明并以 @ 为前缀(您只能在一批中访问此表)
  4. tempdb 上的表 - 公用表,但在管理任务(重新启动服务)之后将被删除

其他:

  1. 您可以使用视图或 TVF 代替临时表(这是另一种方式)
  2. 您可以利用 CTE 的潜力(大多数人仅将其用作视图)

您可以将类型 1、2、4 创建为标准表(使用 create 语句或脚本选择进入)。 类型 3 你必须声明为变量。

会话临时表示例:

    create table #TmpTable (id int, col1 varchar(5), col2 varchar(5))

    insert into #TmpTable (id, col1, col2) select 1, 'KSDFA', 'ASDAS' -- from tbl

【讨论】:

    猜你喜欢
    • 2012-07-31
    • 1970-01-01
    • 2015-01-05
    • 2017-12-20
    • 2016-07-17
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    相关资源
    最近更新 更多