2016-11-18 2 views
0

이 쿼리의 결과를 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 
+0

을 받고있다? 또한 다른 테이블에 조인하려한다고 언급했지만 게시 한 스크립트에는 조인이 없습니다. –

+0

'select ....로 CTE 그룹의 #someTemp에 .... ' – scsimon

답변

0

- 당신은 CTE가 필요하지 않습니다. -

그리고 귀하의 질문에 임시 테이블의 여러 종류가 있습니다 :

  1. 전역 임시 테이블 - ##로 시작
  2. 세션 임시 테이블을 (당신은 다른 세션에서이 테이블에 액세스 할 수 있습니다) - #로 시작 (세션에서이 테이블에만 액세스 할 수 있음)
  3. 변수 임시 - 선언해야하며 접두사가 @ (하나의 배치로만이 테이블에 액세스 할 수 있음)
  4. 테이블의 tempdb - 공통 테이블이지만 관리 작업 후 서비스) 삭제됩니다 에드

기타 :

대신 임시 테이블 (또 다른 방법입니다)
  • 당신이 CTE의의 potencial을 이용할 수의보기 또는 TVF을 사용할 수 있습니다
  • (대부분의 사람들
      을 보기로만 사용하십시오)

    유형 1,2,4는 표준 테이블 (create statement 또는 script select into)로 작성할 수 있습니다. 유형 3은 변수로 선언해야합니다. 세션 임시 테이블의

    예 : 오류가 무엇을

    create table #TmpTable (id int, col1 varchar(5), col2 varchar(5)) 
    
        insert into #TmpTable (id, col1, col2) select 1, 'KSDFA', 'ASDAS' -- from tbl 
    
  • 관련 문제