2017-01-25 9 views
0

以下のクエリを実行しようとしていますが、次のエラーが発生しており、把握できません。SQLサブクエリの無効な列

どのようにして列AllocPerが計算されているのを見てください。

メッセージ207、レベル16、状態1、プロシージャUSP_RS_Dealio_JLL_ECRDetails_test、ライン688
無効な列名が 'dealid':エラーがどこから来ているからです。

メッセージレベル207、状態1、プロシージャUSP_RS_Dealio_JLL_ECRDetails_test、行689
無効な列名 'empid'。

マイSQLコード:

SELECT 
    MarketPerDiff, CommissionDate, empid, dealid 
INTO 
    #vwDealEmpSplitDetail_Emp 
FROM 
    dbo.vwDealEmpSplitDetail_Emp 

PRINT 'Query 1 Starts at ' + CONVERT(nvarchaR(36), getdate(), 114) 
[email protected] t1 = GETDATE() 

SELECT 
    Per.enddate "CommEndDate", 
    'Period ' + CAST(Per.Period AS VARCHAR) "SubPeriod", 
    Col.EligibleDate AS "CollectionDate", 
    Col.DealID, 
    Client.clientName, 
    Deal.DealName, 
    Col.EmpID AS "ProfID", 
    Emp.FullName AS "ProfName", 
    SUM(ISNULL(Col.CashCollected, 0)) CashCollected, 
    Stat.MarketID, 
    Stat.OpUnit, 
    HB.Description, 
    SUM(ISNULL(Col.CostHurdle, 0)) AS "DEmpCostHurdle", 
    ISNULL(Prof.DealCostMultiplier, 50)[DealCostMultiplier], 
    (SELECT SUM(MarketPerDiff) "MarketPerDiff" 
    FROM #vwDealEmpSplitDetail_Emp 
    WHERE #vwDealEmpSplitDetail_Emp.dealid = Deal.DealID AND 
      #vwDealEmpSplitDetail_Emp.empid = Emp.EmpID) as AllocPer 
INTO 
    #SummedValues 
FROM 
    tblEmpCollectionAdj Col WITH(NOLOCK) 
JOIN 
    tblDeal Deal WITH(NOLOCK) ON Deal.DealID = Col.DealID 
LEFT JOIN 
    dbo.tblClient Client WITH(NOLOCK) ON Client.ClientCode = Deal.ClientCode 
JOIN 
    tblMktOpUnitCompStatus Stat WITH(NOLOCK) ON Stat.BatchID = Col.BatchID 
LEFT JOIN 
    dbo.tblEmployee Emp WITH(NOLOCK) ON Emp.EmpID = Col.EmpID AND Emp.Active = 1 
LEFT JOIN 
    dbo.tblCommPeriod Per WITH(NOLOCK) ON Col.EligibleDate BETWEEN Per.StartDate AND Per.Enddate 
LEFT JOIN 
    tblEmpCompProfile Prof WITH(NOLOCK) ON Prof.EmpID = Col.EmpId 
             AND Prof.Active = 1 
             AND Prof.PeriodID = @PeriodId 
             AND Prof.Batchid = Col.Batchid 
LEFT JOIN 
    tblHBAlloc HB ON HB.HBAcctEmpID = Prof.EmpID 
        AND HB.OpUnit = Prof.OpUnit 
        AND HB.CF3 = Prof.MarketId 
        AND HB.FiscalYear = @Year1 
WHERE 
    Col.Active = 1 
    AND Deal.Active = 1 
    AND Col.PeriodId = @PeriodId 
    AND ISNULL(Col.CashCollected, 0) + ISNULL(Col.CostHurdle, 0) NOT BETWEEN - .01 AND.01 
GROUP BY 
    Per.enddate, 
    'Period ' + CAST(Per.Period AS VARCHAR), 
    Col.EligibleDate, Col.DealID, Client.clientName, 
    Deal.DealName, 
    Col.EmpID, 
    Emp.FullName, 
    Col.CashCollected, 
    Stat.MarketID, Stat.OpUnit, 
    HB.Description, 
    ISNULL(Prof.DealCostMultiplier, 50), 
    deal.dealid, Emp.empid, Per.StartDate, Per.Enddate 

PRINT 'Query 1 Ends ' + CONVERT(nvarchaR(36), getdate(), 114) 
[email protected] t2 = GETDATE() 
PRINT ' TIME ELAPSED ' + CAST(DATEDIFF(millisecond, @t1, @t2) AS NVARCHAR(255)) 
+1

大文字と小文字を区別するデータベースの照合順序を使用しており、 'empid'が' EmpID'である必要があります。 – Blorgbeard

答えて

1

エラーが自己explanitoryでなければなりません。あなたがアクセスしようとしているテーブルに存在しないカラムを参照しているようです。あなたのテーブル構造にアクセスすることができなければ、残念なことに私たちはその問題を推測することしかできません。ただし、列にdealidempidが無効であるとエラーが表示されます。彼らはいくつかの場所で使用されていることがわかります。

dealidが次の表/ビューに存在することを確認してください:tblEmpCollectionAdjvwDealEmpSplitDetail_EmptblDeal

そしてempidは、以下の表/ビューに存在することを確認してください。vwDealEmpSplitDetail_EmptblEmpCollectionAdjtblEmployeetblEmpCompProfile

また、@ Blorgbeardがコメント内で言及した点は、カラムとテーブルエイリアスに適切なケーシングを使用していることを確認してください。テーブルtblDealDealというエイリアスがありますが、少なくとも1か所でdealと表示されています。