私はMS SQL Serverを使用しています。私は現在、人員を引き出すためのクエリに取り組んでいます。このプロセスでは、テンポラリテーブルを作成していますが、クエリを1回しか実行できないことに気付きました。変更した後にもう一度実行しようとすると、データベースに「#Test1」という名前のオブジェクトが既に存在します。複数の時刻に実行する一時テーブルを取得する方法
私のSQLは次のようになります。
SET NOCOUNT ON SET ANSI_WARNINGS OFF
IF OBJECT_ID('Tempdb..#Headcount') IS NOT NULL
Drop Table #Test1
Select Coalesce(Enddate,GETDATE()) as EndDate1,FirstName,LastName,EmployeeID,CostCenter,JobCode, CompanyCode
Into #Test1
from EmployeeDM.dbo.vEmployeeJobReporting EJ
--Group By FirstName,LastName,EmployeeID,CostCenter
Order by 1
IF OBJECT_ID('Tempdb..#Headcount') IS NOT NULL
Drop Table #Final1
Select max(EndDate1) as Date1, FirstName,LastName,EmployeeID,CostCenter,JobCode, CompanyCode
Into #Final1
From #Test1
Group by FirstName,LastName,EmployeeID,CostCenter,JobCode, CompanyCode
Order by 1
SELECT F.CostCenter,F.FirstName,F.LastName, F.Date1, F.CompanyCode, F.JobCode,F.EmployeeID,(t3.Day_of_Month-t2.Day_of_Month+1)*1.0/t4.Day_of_Month as Headcount,
Case
最後のSelectステートメントは、非一時テーブルクエリの開始です。行を複数回実行できるようにするには、何をすればいいのですか?また、私が受け取っているエラー:
メッセージ2714、レベル16、状態6、行4 データベースにはすでに '#Test1'という名前のオブジェクトがあります。
ありがとうございます!
まあ、#Headcountが存在する場合に限り、最初のチェックで#Test1が削除されます。おそらくそれは問題ですか?あなたは#Final1のために同じことをやり直します。 –
ちょっとした提案...あなたは本当に順序の代わりに列の名前で注文するべきです。あなたが注文を間違っているため、あなたがあなたのクエリを変更すると間違ったデータを取得する可能性があります。 –
提案をよろしくお願いします!はい、それは問題の一部でした。 –