2011-11-22 60 views
1

我無法弄清楚爲什麼這段代碼作爲查詢執行,但是當我在視圖中執行它時,它會拋出一個多部分標識符無法綁定,錯誤。SQL Server 2008查看錯誤與案件陳述

當我拿出案例說明它在視圖中工作,所以我認爲這是與案例陳述有關。

任何建議表示讚賞。

WITH [cteFrostSum] AS 
(
    SELECT ID AS ID, theMonth as Mo, 
    SUM(dbo.Frost.[DRAmount]) AS [DRAmount] 
    FROM dbo.Frost 
    GROUP BY [ID], theMonth 
) 
SELECT DISTINCT 
    TOP (100) PERCENT  
    dbo.ternean.MemberID, 
    dbo.ternean.SSN, 
    dbo.ternean.GroupName, 
    dbo.ternean.CustomerID, 
    dbo.ternean.GroupNumber, 
    dbo.ternean.LastName, 
    dbo.Frost.DRAmount, 
    dbo.Frost.HittheBank, 
    dbo.Frost.MonthofPremium, 
    cte.[DRAmount] AS [SUM_Frost_Balance], 
    dbo.ternean.TotalCost, 
    cte.[DRAmount] - dbo.ternean.TotalCost AS Diff, 
    dbo.ternean.ACH_RoutingNo, 
    dbo.Frost.RTNum, 
    dbo.ternean.ACH_AcctNo, 
    dbo.Frost.AccountNumber, 

    CASE 
     WHEN dbo.Frost.RTNum <> SUBSTRING(dbo.ternean.ACH_RoutingNo, 2, 20) 
      THEN 'DO not match' 
     WHEN dbo.Frost.RTNum = SUBSTRING(dbo.ternean.ACH_RoutingNo, 2, 20) 
      THEN 'match' 
    END AS [Routing # match], 
    CASE 
     WHEN SUBSTRING(dbo.ternean.ACH_AcctNo, 2, 20) <> dbo.Frost.AccountNumber 
      THEN 'DO not match' 
     WHEN SUBSTRING(dbo.ternean.ACH_AcctNo, 2, 20) = dbo.Frost.AccountNumber 
      THEN 'match' 
    END AS [Account # match], 
    dbo.Frost.theMonth 
FROM dbo.Frost 
INNER JOIN dbo.ternean ON dbo.Frost.ID = dbo.ternean.CustomerID 
    AND dbo.Frost.theMonth = dbo.ternean.theMonth 
INNER JOIN [cteFrostSum] cte ON dbo.Frost.ID = cte.ID 
    AND dbo.Frost.theMonth = cte.Mo 
ORDER BY dbo.ternean.theMonth 
+1

哪個多部分標識符不能綁定? –

+0

ACH_RoutingNo和ACH_acctNo的所有值至少有21個字符長度嗎? – xQbert

+0

也就是說:從dbo.ternean T中選擇ACH_RoutingNo,ACH_AcctNo,其中len(T.ACH_RoutingNo)<21或len(T.ACH_AcctNo)<21返回或isnull(T.ACH_routingNo)或者爲null(T.ACH_AcctNo)返回任何記錄? – xQbert

回答

2

我試圖複製你的錯誤,但不能。

爲什麼你使用多部分標識符的字段名呢? select語句中的字段列表只能引用from子句中的表,首先讀取該查詢似乎是直接引用dbo模式中的表。

給你的表格一些很好的方便的別名,即

FROM dbo.Frost AS F 

,並利用它們這樣

F.RTNum 

其次,你可以簡化你的case語句和只能做一個測試,即:

CASE WHEN SUBSTRING(T.ACH_AcctNo, 2, 20) <> F.AccountNumber 
    THEN 'DO not match' 
    ELSE 'match' 
END AS [Account # match] 
+0

謝謝,更改爲別名使其工作。 – user973671