2012-12-21 27 views
0

我創建2個臨時表#ClientsCountForDoctor#DeathCount爲什麼要在創建臨時表之後使用EXEC?

CREATE TABLE #ClientsCountForDoctor (DoctorCode int, Clients int) 

SELECT 
    Personal.[DoctorCode], Count(Clients.[ClientCode]) AS [Count-Код клиента] 
FROM 
    Personal 
INNER JOIN 
    (Clients INNER JOIN MedicalCard ON Clients.[ClientCode] = MedicalCard.[ClientCode]) ON Personal.[DoctorCode] = MedicalCard.[DoctorCode] 
GROUP BY 
    Personal.[DoctorCode]; 

INSERT INTO #ClientsCountForDoctor 
EXEC nothing 

CREATE TABLE #DeathCount (DoctorCode int, Deaths int) 

SELECT 
    Personal.[DoctorCode], Count(Clients.[ClientCode]) AS [Count-Код клиента] 
FROM 
    Personal 
INNER JOIN 
    (Clients INNER JOIN MedicalCard ON Clients.[ClientCode] = MedicalCard.[ClientCode]) ON Personal.[DoctorCode] = MedicalCard.[DoctorCode] 
GROUP BY 
    Personal.[DoctorCode], MedicalCard.[TreatmentResult] 
HAVING 
    (((MedicalCard.[TreatmentResult])='Смерть')); 

INSERT INTO #DeathCount 
EXEC nothing 

然後我想使用的結果。我應該怎樣做?

SELECT 
    Personal.[DoctorName], 
    #DeathCount.Deaths/#ClientsCountForDoctor.Clients AS [DeathPercent] 
FROM 
    (#ClientsCountForDoctor INNER JOIN Personal ON #ClientsCountForDoctor.[DoctorCode] = Personal.[DoctorCode]) 
INNER JOIN 
    #DeathCount ON Personal.[DoctorCode] = #DeathCount.[DoctorCode]; 

回答

2

我覺得你需要的是Select Into語法。 It will create the table for you with the selected data inserted at the same time。然後從上次查詢做一個正常的選擇使用創建的表

例:

SELECT col1,col2,.. 
INTO #temp   --Note: this temporary table will be created in the db 
FROM yourTable 

您的疑問:

SELECT Personal.[DoctorCode], 
     Count(Clients.[ClientCode]) AS [Count-Код клиента] 
INTO #ClientsCountForDoctor --NOTE 

FROM Personal INNER JOIN 
(Clients INNER JOIN MedicalCard ON Clients.[ClientCode] = MedicalCard.[ClientCode]) 
      ON Personal.[DoctorCode] = MedicalCard.[DoctorCode] 
GROUP BY Personal.[DoctorCode]; 


SELECT Personal.[DoctorCode], 
     Count(Clients.[ClientCode]) AS [Count-Код клиента] 
#DeathCount --NOTE 

FROM Personal INNER JOIN 
    (Clients INNER JOIN MedicalCard ON Clients.[ClientCode] = MedicalCard.[ClientCode]) 
      ON Personal.[DoctorCode] = MedicalCard.[DoctorCode] 
GROUP BY Personal.[DoctorCode], MedicalCard.[TreatmentResult] 
HAVING (((MedicalCard.[TreatmentResult])='Смерть')); 


SELECT p.[DoctorName], d.Deaths/c.Clients AS [DeathPercent] 
FROM #ClientsCountForDoctor c INNER JOIN Personal p 
    ON c.[DoctorCode] = p.[DoctorCode] 
      INNER JOIN #DeathCount d 
    ON p.[DoctorCode] = d.[DoctorCode]; 
+0

「無效列名」 在這裏:d.Deaths/C .Clients – Stalli

+1

檢查你的'select into queries'。每個臨時表都有兩列創建。他們是[DoctorCode],[Count-Кодклиента]'。我只是優化了最後一個查詢,因爲它太難閱讀了。 – Kaf

+0

它應該是#DeathCount而不是d和#ClientsCountForDoctor而不是c對嗎?我嘗試#DeathCount。[Count-Кодклиента]和#ClientsCountForDoctor。[Count-Кодклиента]並得到錯誤信息「多部分標識符無法綁定」。幫助PLZ。 – Stalli

相關問題